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 的滚动是要动态的加载数据的,所以要调用方法来读取数据,如果用属性的话就不能动态的读取数据了,这时就会报错,(读取越界问题)。
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 的滚动是要动态的加载数据的,所以要调用方法来读取数据,如果用属性的话就不能动态的读取数据了,这时就会报错,(读取越界问题)。
相关文章推荐
- self. 与 存取方法有关
- objective-c(六)文件分离,合成存取方法,方法多参数,局部变量,self使用(未完成)
- objective-c(六)文件分离,合成存取方法,方法多参数,局部变量,self使用
- 关于OC中self是调用属性的存取方法以及它可能出现的内存泄露情况
- 有关jQueryEasyUI的form的submit()方法的小问题
- Java中有关方法的简单总结
- ios 避免self循环引用的方法
- asp.net 中 HttpRequest 中跟URL path 有关的方法
- 浅谈iOS面对对象之合成存取方法
- OC隐藏和封装-合成存取方法三(重要)
- 我的学习思维:有关阅读的方法
- 有关数字格式化的方法
- 有关RadioGroup的OnCheckedChanged方法执行多次的探讨
- 有关GetPrivateProfileString的使用方法
- poj1411有关+用筛法 TLE了普通方法AC了+有时间问问
- 有关五种方法逃避防火墙控制系统的研究
- ios开发中类方法和实例方法self区别
- 有关Hibernate映射关系 no session or session was closed问题解绝方法
- 有关NSString和NSMutableString的一些重要方法的使用
- 有关非Java代码(即Java调用C++中自然方法)的问题