作为新手,对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];
问题虽小,但对于新手,确实容易犯迷糊。