这里有很多关于避免使用块保留循环的内容,但是在使用类和类方法时呢?说我有这样的课程:
// MyClass.h
+ (void)doSomethingAsynch:(void (^)(void))block;
+ (void)doSomethingElse;
并且来电者想说这个:
[MyClass doSomethingAsynch:^{
[MyClass doSomethingElse];
}
调用者必须声明MyClass的unsafe_unretained副本吗?或者是一个类似单身的类,它不会增加它的保留计数?如果我们将一个班级的保留计数发送到月球是否重要,因为我们希望它始终存在?
答案 0 :(得分:4)
[[NSObject class] retainCount]
返回NSUIntegerMax
,所以,是的,类是作为单例实现的,可能会将release
覆盖为无操作。
<强>附录:强>
在第1659行的NSObject
objc runtime implementation中,您会发现......
+ (id)retain {
return (id)self;
}
...验证[NSObject retain]
什么都不做。
答案 1 :(得分:2)
正如您所建议的那样,系统永远不会释放类,因此如果您反复保留它们并且从不释放它们就不重要了。我的猜测是,班级retain
什么都不做。
答案 2 :(得分:-1)
你将这些方法暴露为静态/类方法(前面的'+'而不是' - '作为实例方法),所以你当然不需要为这个特定的类做[[MyClass alloc] init]
你只想使用那些方法。由于您未使用alloc
,因此您无需担心retain
或release
。
这些天使用ARC(自动引用计数),大多数无论如何都不必担心retain
和release
,它会在编译时为您添加所有内容
编辑:强调主要是,因为有时你仍然需要担心它,也增加了一些清晰度