码迷,mamicode.com
首页 > 移动开发 > 详细

IOS的属性和实例变量

时间:2015-10-25 13:38:50      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:

实际上,@property声明的是属性,并不是实例变量。但是编译器会根据属性,自动生成实例变量,和对应的access方法。所以已经在interface里声明了@property,就不再需要在implementation里再声明实例变量了。

要记住,属性不是实例变量,而是根据属性会生成实例变量(和对应的access方法)。所以,属性名叫name,而实例变量的名字并不是name。在我这个环境ios7+xcode5,命名规则似乎是在属性前面加上_

因为oc中点表达式是表示调用方法,所以如果只有实例变量而无对应属性,是无法使用点操作来访问实例变量的。如果点表达式出现在等号 = 左边,该属性名称的setter方法将被调用。如果点表达式出现在右边,该属性名称的getter方法将被调用。

 

 

类与类别中添加的属性要区分开来,因为类别中只能添加方法,不能添加实例变量。经常会在ios的代码中看到在类别中添加属性,这种情况下,是不会自动生成实例变量的。

注意一点,匿名类别(匿名扩展)是可以添加实例变量的,非匿名类别是不能添加实例变量的,只能添加方法,或者属性(其实也是方法)。

 

 

导入  <objc/runtime.h> 即可以使用 objc_setAssociatedObject 这个运行时函数。可以将一个对象与另外一个对象关联。其实就实现了拓展一个类的内存。

@interface UIScrollView (MyRefresh)  
@property(strong,nonatomic) DefaultTopLoadView *topShowView;  
@end  
@implementation UIScrollView (MyRefresh)  
static char topShowViewChar; 
-(DefaultTopLoadView *)topShowView{  
    return objc_getAssociatedObject(self, &topShowViewChar);  
}  
-(void)setTopShowView:(DefaultTopLoadView *)topShowView{  
    objc_setAssociatedObject(self, &topShowViewChar,topShowView,OBJC_ASSOCIATION_RETAIN_NONATOMIC);  
}  
@end

 

 

 

IOS的属性和实例变量

标签:

原文地址:http://www.cnblogs.com/guoxiaoqian/p/4908617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!