我有点理解什么是自动保存和释放的,但我找不到任何官方数据,我想我搞错了。
self.的情况下在同一个对象内设置属性我有什么不对/忘了什么吗?
当返回被丢弃时会发生什么?就像[object someMethodThatReturnsAnObject];。它将不是它返回的方法的本地的,所以我不确定它是否会被释放,并且xCode警告它。
发布于 2011-06-16 20:16:43
设置使用@property( retain )声明的属性将保留和释放旧值,但不会在没有self的情况下在同一个对象中设置属性。
调用为retain属性合成的setter方法将释放旧值并保留新值。直接设置一个象牙人,而不经过你的访问者,只会分配这个象牙人。它既不会保留也不会释放任何东西。self.foo = bar正是[self setFoo:bar]。无论setFoo:做什么,都会完成(合成的setFoo:保留版本就像上面所描述的那样工作)。foo = bar正是foo = bar。
方法中的所有对象(包括参数)在创建/传递时保留,并在方法返回时释放。
这根本不是事实。他们既不保留也不释放。保持和释放不是神奇的发生。这是在响应对alloc、new、copy、retain和release的调用时发生的。使用点表示法只是方法调用的一个简短操作,其中可能包含一个retain。
方法返回的对象不会被释放,而是将由其返回的方法释放,因为它在方法中的局部变量。
这不是真的。方法返回的对象既不保留也不释放。按照惯例,名为alloc、new或copy的方法将返回net +1 retain。任何其他方法都将返回一个NET0保留计数(对象上的自动释放将与保留的数量一样多)。“当前”保留计数将始终大于0,否则无法返回对象。(这是对事实的轻微掩饰。在这两种情况下,如果存在私有保留,则保留计数可能大于1。但从调用者的角度来看,这是一种很有用的思考方法。)
最好的地方是实用内存管理,它非常简洁地展示了这一切。其余的内存管理编程指南将给出更多的例子。
https://stackoverflow.com/questions/6377858
复制相似问题