我有一个带有NSMutableDictionary varibale的头文件和一个函数如下
#import <Foundation/Foundation.h>
@interface Client : NSObject{};
@property (assign)NSMutableDictionary *dict;
- (NSMutableDictionary *)myDict;
@end
在.m文件中
@implementation Client
{
NSMutableDictionary *dict;//=[[NSMutableDictionary alloc]initWithCapacity:10];
}
-(NSMutableDictionary *):myDict{
return dict;
}
我的问题是我必须在哪里初始化dict?这样我就可以通过使用Client.myDict之类的东西从项目的任何地方访问它。 (它必须返回所有键值对)
答案 0 :(得分:1)
您正在定义一个方法myDict
来检索dict
属性的值。但是当编译器合成该属性时,它将自动合成dict
getter方法,因此不需要myDict
方法。你可以删除它。
一般来说,你会这样做:
#import <Foundation/Foundation.h>
@interface Client : NSObject
@property (nonatomic, strong) NSMutableDictionary *dict;
@end
注意,@interface
行没有大括号,也没有分号。
并且,在回答有关如何初始化属性(或技术上,合成的实例变量)的问题时,您可以在类的init
方法中执行此操作:
@implementation Client
- (id)init
{
self = [super init];
if (self) {
_dict = [[NSMutableDictionary alloc] init];
}
return self;
}
@end
注意,不需要显式声明的实例变量,因为编译器会为您合成一个(带有前导下划线)。此外,也不需要编写“getter”方法,因为编译器也会为你合成。
如果你使用的是ARC(我希望你是),你可以用assign
替换strong
,就像我上面所做的那样。但是,如果您不使用ARC,则将其保留为retain
,但之后您必须编写dealloc
方法(但不写入此内容你有ARC):
- (void)dealloc
{
[_dict release];
[super dealloc];
}
然后您可以像这样使用此类:
Client *client = [[Client alloc] init];
[client.dict addObject:@"One"];
// you can access it this way
NSLog(@"client.dict = %@", client.dict);
// or this way
NSLog(@"[client dict] = %@", [client dict]);