因为看的资料比较杂,一直很迷惑这个,今天花了点时间整理一下思路
比如下面的一些写法,不同的教程都不一样:
self.test=abc;
test=abc;
[test release];
[self.test release];
self.test=nil;
总结下:
@property(nonatomic,retain) NSString *test;
@synthesize test
1,这个操作在新版的xcode等于同时声名了成员变量test,并生成其getter\setter方法。
2,@property的retain等参数只是告诉编译器怎么生成(当初我理解成test和self.test是两个不同的指针)。
3,self.test=abc等于使用了@synthesize生成的setter,其过程有进行内存管理,不会造成内存泄漏,而test=abc则直接更改指针指向,所以尽量使用self.来赋值。
4,self.test=nil;等于执行了
[test release];
[test=nil];
看一下@synthesize生成的setter是怎样工作的:
-(void)setString:(NSString *)test {
if (string != newString) {
[string release];
string = [newString retain];
}
}