我是 ARC 的新手。我的问题是,如果我们在视图控制器上创建类型属性,一旦导航控制器发生strong
,我们需要将其设为 nil 。popViewController
通常,我们会在viewDidUnload
. 但在 iOS 6 中,它已被弃用。
那么我们在哪里制作那个对象nil
呢?Apple 说要这样做,didReceiveMemoryWarning
但是每次弹出视图控制器时都不会调用该方法。
我是 ARC 的新手。我的问题是,如果我们在视图控制器上创建类型属性,一旦导航控制器发生strong
,我们需要将其设为 nil 。popViewController
通常,我们会在viewDidUnload
. 但在 iOS 6 中,它已被弃用。
那么我们在哪里制作那个对象nil
呢?Apple 说要这样做,didReceiveMemoryWarning
但是每次弹出视图控制器时都不会调用该方法。
别担心。您的属性将全部nil
由 Objective-C 运行时自动设置为dealloc
. 这适用于所有属性,而不仅仅是视图控制器上的插座。
strong
如果您想保留被引用对象的所有权,您可以定义一个属性。
据我所知,您可能需要一个弱属性(当您的对象被其他人释放时,您不需要它并且可以释放它)或者可以在方法中将其设置为 nil 的解决viewDidDisappear
方法,但正如 Jim Puls说,没有看到你的代码我的只是有根据的猜测......
如果您在相同的两个视图控制器之间弹出/推送,则 UINavigationController 中的指针不应该改变,只要它们没有被释放。如果它们确实被释放了,那么它们中的所有东西也应该被释放。您最终可能会创建这些视图控制器的新副本,但这不应该成为问题,因为您只是在旧副本已被释放时才创建新副本。保留对象的唯一方法是,如果您的视图控制器(或其中的对象)相互引用,从而导致它们被保留。
strong
和之间的区别weak
不是你需要手动设置strong
为nil。相反,strong
关系会导致对象被保留,而weak
不会。这就是为什么通常将委托设置为的原因,weak
因为您不希望委托保留其父级(不完全是父级,而是它是委托的对象)。