self. 与 存取方法有关

先看一下面的类:

MyClass.h 
@interface MyClass : NSObject { 
MyObject *myObject; 

@property (nonatomic, retain) MyObject *myObject; 
@end

MyClass.m 
@synthesize myObject; 
-(id)init{ 
if(self = [super init]){ 
MyObject * aMyObject = [[MyObject alloc] init]; 
self.myObject = aMyObject; 
[aMyObject release]; 

return self; 
}

 

MyObject * aMyObject = [[MyObject alloc] init]; //aMyObject    retainCount=1;

self.myObject=aMyObject;//myObject  retainCount=2;

这是为什么呢?

@property (nonatomic, retain) MyObject *myObject; 

是用来设置属性的存取方法的,

这要分析一下 retain,assign,copy

// 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]; 
}

这样看,self.  是用来调用方法的,

-  (MyObject *)myObject{

    return  myObject;

}

self.myObject 就是在调用方法,方法名就是属性名,

如果上面代码写为:

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

这样就只是指针赋给另一个指针了,

在很多时候是用到   self.  的,

在UITableView中 绘制 UITableViewCell的方法中  在要获得数据时 就要用到 self. 的

UITableView  的滚动是要动态的加载数据的,所以要调用方法来读取数据,如果用属性的话就不能动态的读取数据了,这时就会报错,(读取越界问题)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值