Objective-C中property字段的了解

写一个@property编译器自动

1)生成私有属性,(属性类型和@property属性一致,属性名前自动加一个下划线“_”)

2)生成getter  setter的声明

3)生成getter  setter的实现

继承:

父类的@property可以被子类继承,@property生成的属性是私有的,在子类中无法直接访问,可以通过getter  setter来访问

 

@property参数

1)与多线程相关的 :   atomic 、 nonatomic

2) 与生成setter方法的实现相关的: assign、retain(MRC)、copy 

3)与生成只读、读写相关的:readonly 、readwrite

4)与生成getter、 setter方法名相关的:  getter 、setter

5)与强弱指针类型有关的:strong 、 weak

 

区别:

atomic 、 nonatomic:

atomic默认值,生成setter方法的代码会被加上一把线程安全锁,安全、效率低下;

nonatomic在生成setter方法的代码不会加线程安全锁,不安全、效率高;

 

 

assign、retain(MRC)、copy :

assign:用于基本数据类型、非OC对象,setter方法直接赋值,不更改引用计数

retain:setter方法实现是标准的MRC内存管理代码,先判断新旧对象是否是同一个对象,如果不是,release旧的retain新的对象,引用计数+1

-(void)setCar:(int)car{

  if(_car ! = car)

  {   [_car release];

        _car = [car retain];

   }

}

注意:retain参数只是生成的标准的setter方法,不会自动的在dealloc中生成release的代码,所以要手动的重写dealloc方法,生成release的代码

copy: 拷贝特性,setter方法将release旧值,copy新值,传入的对象是在内存中拷贝一份,两个指针指向不同的内存地址。

retain和copy的区别就是:copy其实是建立了一个相同的对象,引用计数为1,而retain只是保存其对象,并且其计数值+1。retain是指针拷贝,copy是内容拷贝。

 

readonly 、readwrite

readonly: 只生成getter方法,不会生成setter方法

readwrite:默认值,同时生成getter、setter

 

getter 、setter

通过getter=方法名、setter=方法名修改@property生成的getter 、setter方法的名字

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值