这里发布了大量关于避免使用 block 的保留循环的内容,但是当使用类和类方法时呢?假设我有一堂这样的课:
// MyClass.h
+ (void)doSomethingAsynch:(void (^)(void))block;
+ (void)doSomethingElse;
来电者想说的是:
[MyClass doSomethingAsynch:^{
[MyClass doSomethingElse];
}
调用者必须声明 MyClass 的 unsafe_unretained 副本吗?或者像单例这样的类不会增加它的保留计数?如果我们将类的保留计数发送到月球,因为我们希望它始终存在,这有什么关系吗?
最佳答案
[[NSObject class] keepCount]
返回 NSUIntegerMax
,因此,是的,类被实现为单例,并且可能会覆盖 release
作为 no -操作。
附录:
在 objc runtime implementation NSObject
在第 1659 行你发现...
+ (id)retain {
return (id)self;
}
...它验证 [NSObject keep]
不执行任何操作。
关于ios - 类保留计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267887/