[转Iphone]关于self.用法的一些总结

 

MyClass.h

 
@interface MyClass : NSObject {
    MyObject * _myObject;
}
@property (nonatomic, retain) MyObject *myObject;
@end
 

MyClass.m

  @synthesize myObject = _myObject; 

OK, 你现在再试下, 如果你用self._myObject = aMyObject; 或者 myObject = aMyObject; 你会得到一个错误, 为什么呢, 这里就是和Obj-c的存取方法有关了. 说白了很简单 , 大家都知道, @property (nonatomic, retain) MyObject *myObject; 是为一个属性设置存取方法, 只是平时我们用的方法名和属性名是一样的,现在你把它写成不同的名字, 就会很清楚了. _myObject是属性本身, myObject是存取方法名.

 

 

 

 

assign, retain ,copy.

get方法是:

 
-(MyObject*)myObject{
    return _myObject;
}
 

Set方法是:

 
// assign 
-(void)setMyObject:(id)newValue{
    _myObject = newValue; 
}
// retain 
-(void)setMyObject:(id)newValue{
    if (_myObject != newValue) { 
        [_myObject release]; 
        _myObject = [newValue retain]; 
    }  
}
// copy 
-(void)setMyObject:(id)newValue{
    if (_myObject != newValue) { 
        [_myObject release]; 
        _myObject = [newValue copy]; 
    } 
}
 
示例:

    1.加self.:

 
        MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject retainCount = 1;
        self.myObject = aMyObject; //myObject retainCount = 2;
        [aMyObject release];//myObject retainCount = 1;
 

    2. 不加self.:

 
       MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject retainCount = 1;
        myObject = aMyObject; //myObject retainCount = 1;
        [aMyObject release];//对象己经被释放 
 

再看直接赋值的:

    3.加self.:

 

self.myObject= [[MyObject alloc] init]; //myObject retainCount = 2;
 

    4. 不加self.:

 
        myObject = [[MyObject alloc] init]; //myObject retainCount = 1;
 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值