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