1)使用保留的原因是什么?

例如,在setter方法中:

- (void) setCount: (int) input {
    [intCount autorelease];
    intCount = [input retain];
}


2)autorelease方法:是删除旧对象还是准备新对象?

3)为什么在输入对象上调用了保留方法?



intCount = input;


是错的?
又为什么呢

最佳答案

保留用于增加对象的retainCountNSObjects具有一个称为retainCount的属性,该属性维护当前保存在一个对象上的引用数。当对象的retainCount达到0时,可以从内存中释放该对象。有效地,这可以防止某个对象在其他地方仍在使用时从内存中释放出来。
autorelease方法不会删除旧对象,也不会准备新对象。实际上,这是释放对象的抢先调用(自动释放比这要复杂得多,您应该在Memory Management Guide.中进行阅读)
在您的情况下,intCount = input不会出错,因为您使用的是原始语言。但是,如果输入是一个对象,则需要在其上调用retain。实际上,您甚至不需要为基元(或对象)编写自己的getter / setter,而是应该使用Declared Properties。实际上,使用声明的属性几乎总是更好,如果您想自己滚动,请先了解pitfalls of doing so

09-16 20:44