linyawen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

因为看的资料比较杂,一直很迷惑这个,今天花了点时间整理一下思路

比如下面的一些写法,不同的教程都不一样:
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];

    }

}

posted on 2012-06-03 12:49  linyawen  阅读(1145)  评论(0编辑  收藏  举报