类保留计数

时间:2013-01-10 21:49:56

标签: ios objective-c singleton retaincount retain-cycle

这里有很多关于避免使用块保留循环的内容,但是在使用类和类方法时呢?说我有这样的课程:

// MyClass.h

+ (void)doSomethingAsynch:(void (^)(void))block;
+ (void)doSomethingElse;

并且来电者想说这个:

[MyClass doSomethingAsynch:^{
    [MyClass doSomethingElse];
}

调用者必须声明MyClass的unsafe_unretained副本吗?或者是一个类似单身的类,它不会增加它的保留计数?如果我们将一个班级的保留计数发送到月球是否重要,因为我们希望它始终存在?

3 个答案:

答案 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,因此您无需担心retainrelease

这些天使用ARC(自动引用计数),大多数无论如何都不必担心retainrelease,它会在编译时为您添加所有内容

编辑:强调主要是,因为有时你仍然需要担心它,也增加了一些清晰度