Ios 类别保留计数

Ios 类别保留计数,ios,objective-c,singleton,retaincount,retain-cycle,Ios,Objective C,Singleton,Retaincount,Retain Cycle,这里发布了大量关于避免使用块保留循环的内容,但是在使用类和类方法时又如何呢?假设我有一门课是这样的: // MyClass.h + (void)doSomethingAsynch:(void (^)(void))block; + (void)doSomethingElse; 打电话的人想说: [MyClass doSomethingAsynch:^{ [MyClass doSomethingElse]; } 调用方必须声明MyClass的不安全副本吗?或者一个类就像一个单例,它不会

这里发布了大量关于避免使用块保留循环的内容,但是在使用类和类方法时又如何呢?假设我有一门课是这样的:

// MyClass.h

+ (void)doSomethingAsynch:(void (^)(void))block;
+ (void)doSomethingElse;
打电话的人想说:

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

调用方必须声明MyClass的不安全副本吗?或者一个类就像一个单例,它不会增加它的保留计数?如果我们把一个类的保留计数发送到月球上有关系吗?因为我们希望它一直存在?

正如你所建议的,类永远不会被系统释放,所以如果你反复保留它们,永远不会释放它们,那就没什么关系了。我的猜测是,
retain
对一个类没有任何作用。

您将这些方法公开为静态/类方法(前面的'+'而不是'-'作为实例方法),因此,如果您只想使用这些方法,当然不需要对这个特定类执行
[[MyClass alloc]init]
。由于您没有使用
alloc
,因此不必担心
保留
发布

现在有了ARC(自动引用计数),您几乎不必担心
保留
发布
,总之,它在编译时为您添加了所有这些


编辑:主要强调的是,因为有时您仍然需要担心它,还增加了一些清晰性

[[NSObject class]retainCount]
返回nsuigermax,因此,是的,类被实现为单例,并且可能作为禁止操作重写
release

附录:

在第1659行的
NSObject
目录中,您可以找到

+ (id)retain {
    return (id)self;
}

。。。它验证
[NSObject retain]
不执行任何操作。

好的,谢谢+这里是1,+1/在@Nikolai b/c上更正了关于类保留计数的有用经验证据。我认为有人在这里做了-1,因为即使在ARC下,有时你也需要担心内存管理。块中的Retain cycles就是一个例子。我试图让我的答案更加清晰,在这种情况下,它与C#中带有静态方法的静态类相同,只是基于问题中提供的内容。