我担心我很愚蠢。目标C自我变量与变量赋值之间的差异
我已经花了大约三个小时追踪内存泄漏,这已经破坏了我的理智,并且在评论了我的一半应用后,我得出了以下结论。
鉴于以下在正确的地方。
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我由于某种原因双重保留?
有人可以向我解释为什么会出现这种情况,或者如果不是我可能做错了什么?
干杯
啊谢谢。由于某种原因,我假设因为setter透明地执行了保留,即某段代码会记住它的存在,并在销毁时透明地释放它。谢谢你解决我的问题。 – dageshi 2010-06-21 21:50:20
顺便说一下,惯例是对'NSString *'变量使用'@property(nonatomic,copy)'而不是'(nonatomic,retain)'。通过保留,另一个对象可以将一个可变字符串分配给您的属性,然后修改字符串的内容,而不会让您的类发现它,这会破坏封装。 – 2010-06-21 21:55:39