我刚才弄清楚为什么有些代码无法正常工作。我有类似的东西:
@interface Client : NSObject {
Connection *connection;
}
@property (retain) NSMutableDictionary *channels;
接下来是这个实现:
@implementation Client
@synthesize channels;
- (id)init
{
self = [super init];
if (self) {
// do whatever I want
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
}
return self;
}
知道为什么channels
在这个类的init
构造函数中有一个0x0的内存地址?我无法弄清楚为什么会发生这种情况。我肯定会调用那个构造函数,它应该合成属性,允许我用它做任何我想做的事。
答案 0 :(得分:4)
除非您明确将channels
设置为某个值,否则它将保持为nil
。也许您打算在init
方法中执行以下操作?
if (self) {
// do whatever I want
channels = [[NSMutableDictionary alloc] init];
}
另外两种设置频道的方法:
[self setChannels:[NSMutableDictionary dictionary]]; //These two lines...
self.channels = [NSMutableDictionary dictionary]; //...are equivalent.
请注意,在这种情况下,由于我们使用的是retain
访问者,因此我们使用自动释放的+dictionary
而不是alloc
/ init
,如果不使用则会泄漏ARC。
当然,如果不使用ARC,channels
也必须在-dealloc
中正确发布:
- (void)dealloc
{
[channels release];
}
答案 1 :(得分:1)
它是0x0,因为你永远不会将频道设置为任何东西。你至少需要这样做:
channels = [[NSMutableDictionary alloc] init];
然后在dealloc中你必须记住:
[channels release];