0

我刚刚弄清楚为什么某些代码无法正常工作。我有以下内容:

@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的构造函数中的内存地址为 0x0吗?init我一生都无法弄清楚为什么会发生这种情况。我肯定会调用那个构造函数,它应该合成属性,让我可以用它做任何我想做的事情。

4

2 回答 2

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访问器,所以我们使用 autoreleased+dictionary而不是alloc/ init,如果不使用 ARC 会泄漏。

当然,如果不使用ARC ,channels也必须正确发布:-dealloc

- (void)dealloc
{
    [channels release];
}
于 2012-08-02T20:47:03.023 回答
1

它是 0x0,因为您从不将通道设置为任何内容。你至少需要做:

channels = [[NSMutableDictionary alloc] init];

然后在 dealloc 中你必须记住:

[channels release];
于 2012-08-02T20:47:07.413 回答