您的位置:首页 > 其它

self. 与 存取方法有关

2012-05-21 09:07 155 查看
先看一下面的类:
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 的滚动是要动态的加载数据的,所以要调用方法来读取数据,如果用属性的话就不能动态的读取数据了,这时就会报错,(读取越界问题)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: