内存管理和viewDidLoad(iphone,objective-c)

内存管理和viewDidLoad(iphone,objective-c),iphone,memory-management,viewdidload,Iphone,Memory Management,Viewdidload,我在viewDidLoad中分配了一个NSArray(首先,这样做可以吗,比如它是好的实践吗?),但是我在哪里发布它呢?在ViewDidUnload、dealloc或DidReceiveMemoryWarning中 (我是否也应该将其消息设置为release,或将其设置为nil,或清空数组或组合?您可以在viewDidLoad中进行分配,并在解除分配时对每个项目调用release(添加它们时调用retain,因此如果需要,请确保释放) 如果你不需要它,你应该尽快释放它。如果您想保留它(因为它是一

我在viewDidLoad中分配了一个NSArray(首先,这样做可以吗,比如它是好的实践吗?),但是我在哪里发布它呢?在ViewDidUnload、dealloc或DidReceiveMemoryWarning中


(我是否也应该将其消息设置为release,或将其设置为nil,或清空数组或组合?

您可以在viewDidLoad中进行分配,并在解除分配时对每个项目调用release(添加它们时调用retain,因此如果需要,请确保释放)


如果你不需要它,你应该尽快释放它。如果您想保留它(因为它是一个缓存),那么您可以在所有三种情况下释放它,但不要多次释放它。

您可以在viewDidLoad中进行分配,当解除分配时,它会在每个项目上调用release(添加它们时,它会调用retain,因此,如果需要,请确保释放)


如果你不需要它,你应该尽快释放它。如果您想保留它(因为它是缓存),那么您可以在所有三种情况下释放它,但不要多次释放它。

要释放对象,请发送释放消息:

[myObject release];
有关更多详细信息,请参阅


没有必要清空数组。当数组上的引用计数降至零时,它将对其所有对象调用[object release]。

要释放对象,请发送释放消息:

[myObject release];
有关更多详细信息,请参阅


没有必要清空数组。当数组上的引用计数降至零时,它将对其所有对象调用[object release]。

您应将NSArray分配给保留属性
self
,并在viewDidLoad中(自动)释放它。然后在
dealloc
中释放它。在此设置中,当调用viewDidLoad时,它会释放“当前”NSArray(如果有)


但是,如果可能的话,您最好在
init
函数之一中分配NSArray。

您应该将NSArray分配给
self
的保留属性,并在viewDidLoad中(自动)释放它。然后在
dealloc
中释放它。在此设置中,当调用viewDidLoad时,它会释放“当前”NSArray(如果有)


但是如果可能的话,听起来你最好在
init
函数中分配NSArray。

我知道如何释放对象。我在问哪里。我在回答问题的第二部分,关于释放对象的正确方式是什么([obj release],self.obj=nil,…)。mvds准确地回答了第一部分。我知道如何释放对象。我在问哪里。我在回答问题的第二部分,关于释放对象的正确方式是什么([obj release],self.obj=nil,…)。mvds已经准确地回答了第一部分。但是如果我自动释放它并在dealloc中发布,它不会发布两次吗?并导致错误,因为它试图释放一个不存在的对象。是的,但您希望它被释放两次:第一次是因为您从一开始就获得了一个保留计数,第二次是因为您的对象挂起了它,因为您将它分配给了保留属性。也就是说,通过执行
self.prop=[obj autorelease]
可以有效地将所有权从函数转移到对象。但是如果我自动释放它并在dealloc中释放它,这不会释放它两次吗?并导致错误,因为它试图释放一个不存在的对象。是的,但您希望它被释放两次:第一次是因为您从一开始就获得了一个保留计数,第二次是因为您的对象挂起了它,因为您将它分配给了保留属性。也就是说,通过执行
self.prop=[obj autorelease]
可以有效地将所有权从函数转移到对象。