打印对象引用计数
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,保不齐里面有很多方法返回的临时对象,被加入到对象释放池,不会被立即释放。