oc语言中@property的使用

oc语言中@property的使用
Xcode4时,@property只能生成getter、setter方法的声明;
从Xcode5开始,@property 可以自动生成_propertyName成员变量和getter、setter方法的声明和实现。默认情况下,getter、setter方法作用于_propertyName变量。

@interface Circle : NSObject
@property int pointX, pointY;
@property double radius;

@end
@implementation Circle
@end

在这里甚至连 pointX,pointY属性都不用声明,在最新的xcode当中使用了 @property 基本数据类型名 变量面 语句就可以自动生成1._变量名的私有变量 //注意 这里是自动加了一个下划线的,实际上,私有属性的名字是什么已经不重要了,因为我们只能在外部通过setter和getter方法来访问到私有变量,通过的是方法名来访问,属性名已经无关紧要。
自动加载了变量的setter和getter方法
其中setter方法为

- (void)setPointX : (int)pointX {
    self->_pointX = pointX;
}

这里要注意 setter方法是命名会自动去掉变量的下划线 并且首字母自动转换为大写

getter方法为

- (int)pointX {
    return _pointX;
}

这里跟java不同的一点是 java的getter命名方法规范是getPointX 在oc里跟变量名一样 是pointX。
基本数据类型的使用比较简单,而针对对象的使用就稍微复杂一些。比如想声明一个NSString属性,并且让编译器自动加载setter和getter方法。就需要加入一些@property的属性来通知编译器进行一些列操作:@property(属性,属性。。。)NSString *变量名。(这里要注意的是,传入的属性数量没有硬性要求,一般是2-3个属性。)
代码如下

@interface Student : NSObject
@property(nonatomic, copy, readwrite) NSString *name;
@end
@implementation Student
@end

下面是@property各属性的详解:

属性名作用
atomic原子操作 线程安全 有枷锁解锁机制 安全 (默认)
nonatomic声明一个非自己创建的对象的所有权,如果创建所有权之后 放弃只会放弃所有权,而不会释放内存 所有的都放弃所有权之后 系统会自动释放内存,防止A创建物体后B使用,A放弃了之后,B就再也找不到了这种情况。
assign简单赋值,不需要更改索引计数。应用场合:对基础数据类型(例如NSInteger,CGFloat)和c数据类型(int,float,double,char 等)
retain与strong对应,使用了引用计数,retain+1,retain-1;当引用计数retaincount=0时,delloc会被调用,内存释放
copy用于非共享内存时,每个指针都有自己的内存空间,用于NSString对象指针。
readwrite默认属性 有setter和getter方法,另外有readonly只读属性

常用的有以上这些 详细参考@property属性详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值