self.赋值时使用alloc的问题

来源:互联网 发布:html 阿里云 视频 编辑:程序博客网 时间:2024/06/11 07:33

作为新手,对self.的用法有些不习惯,因为它和其它语言不同。赋于了很多特殊的情况。

属性赋值时要注意内存问题。

对于 self.myArray = [NSArray alloc]init....

myArray的定义为:

@property (nonatomic,retain)NSArray * myArray;@synthesize myArray;


对不起,这个代码多半会有内存泄露。试试 myArray的retainCount ,现在是2.

如果改成这样:

   myArray = [NSArray alloc]init...

这样就不会。myArray的retainCount是1。

why?

这就和 self.的原理有关。因为self.的赋值调用实际代码会是:

-(void) setMyArray: (NSArray *) newArray{    if(myArray != newArray)    {          [myArray release]         myArray = [newArray retain];    } }
看到没有,[newArray retian],所以,第一种写法会导致retainCount为2。

因此,对于属性的赋值,正确的写法有以下几种。

1: myArray = [NSArray alloc]init...2: self.myArray = [[NSArray alloc]init..]autorelease];3: NSArray * temp = [NSArray alloc]init..   self.myArray = temp;   [temp release];

当然,在dealloc里,你需要将 [myArray release];


问题虽小,但对于新手,确实容易犯迷糊。




原创粉丝点击