我担心我是愚蠢的。
我花了大约三个小时来追踪一个内存泄漏,它一直在摧毁我的理智,在注释掉我的一半应用程序后,我得出了以下结论。
在正确的位置给出以下内容。
NSString *blah;
@property (nonatomic, retain) NSString *blah;
@synthesize blah;
-(id)initWithBlah:(NSString*)b {
self.blah = b; //this leaks
blah = b; //this does not
}
我对 objectice c 并不是特别有经验,我知道如果我在类之外调用 object.blah = b;我将透明地调用一个将保留 b 的 setter 函数。在函数内部,我假设通过使用 self.blah = b 设置它,我出于某种原因进行了双重保留?
有人可以向我解释为什么会这样吗?或者如果不是我可能做错了什么?
干杯
最佳答案
blah = b
直接修改类实例变量。
self.blah = b
将调用访问器(如果存在) - 从而根据需要保留、释放资源。
您应该将 [blah release];
添加到您的 dealloc 方法中,以便在您的类被释放时释放资源。
关于objective-c - Objective C self.variable 和变量赋值之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088680/