ObjectC的一些注意事项

打印对象引用计数

NSLog(@“count3=%ld”, CFGetRetainCount((__bridge CFTypeRef)test));

对“弱引用”的误解

NSValue *val = [NSValue valueWithNonretainedObject:observer]; //保存指针
id obj = [val nonretainedObjectValue]; //读取指针强转成对象(可能会崩溃)

valueWithNonretainedObject和nonretainedObjectValue不能认为是弱引用操作,只是指针的操作,如果对象被销毁,val里面保存的指针变成野指针,nonretainedObjectValue会崩溃

而真正的弱引用,如果对象被销毁,弱引用返回应该是null。这是弱引用和指针的区别。网上很多文章都误导了开发者。

@autoreleasepool的理解

OC里面有个对象释放池的概念,方法返回的临时对象会被加入到对象释放池,引用计数加1。被加入的对象,在退出@autoreleasepool块才会被销毁。而普通的临时对象不会加入到自动释放池。所以要求在for循环(循环次数很多)里面加入@autoreleasepool,保不齐里面有很多方法返回的临时对象,被加入到对象释放池,不会被立即释放。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值