self.赋值时使用alloc的问题

作为新手,对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];


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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值