Objective-C中属性使用

在Objective-C中有些使用中一些记录


一。atomic 与nonatomic 区别

atomic 原子性 

设置成员变量的@property属性时,默认为atomic,提供多线程安全。

nonatomic 非原子性

禁止多线程,变量保护,提高性能。

建议在没有多线程数据处理情况下时候性能较高的nonatomic。


二,self.xx 与_.xx区别

前者调用该类的setter或getter方法,后者直接获取自己的实例变量。

1,经过@property的属性,在赋值的时候最好带上self.来访问。比如声明为retain的属性a ,只有经过self.a=x;这样才会对x retain一次么,否则不会。同时如果是不使用

A * _a = [A alloc]int]; 
self.a = _a;
 _a release;

2、经过@synthesize的属性,在释放的时候,如果@property的释放的时候要么这样写:
self.a = nil;
要么这样写 :
[a release];
        a = nil;

如果这样写:
[self.a release];
a = nil;
或者这样:
[self.a  release];
self.a = nil;
或者。。。
这样的话编译器不会报错 ,但是运行时就会奔溃,提示 A release 时出问题 ,程序尝试 释放了已经释放的对象。这样写表面上看起来 跟上面没有多大的差别 啊,为什么会 出现这样的问题呢?问题就出在@property和@synthesize这俩关键字上面。

self.a 访问a是get函数,self.a =nil;其实会先释放a原来指向的内存空间,然后将a赋值为nil,就是清空了对应的内存空间。所以self.a= nil;一句话就已经把对象的属性给释放掉了,后面不需要再release了。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值