gpt4 book ai didi

objective-c - 在Objective-c中,如果在执行子方法的过程中父代取消分配子代会发生什么情况?

转载 作者:行者123 更新时间:2023-12-03 13:00:48 26 4
gpt4 key购买 nike

我有一个 parent 对 child 有很深的了解。 child 对 parent 的提及较弱。

父级在一个线程上对子级调用方法。父级可能会在子级方法完成执行之前取消分配子级。没有明显的方法来同步此操作,以避免父方法在方法返回之前取消分配子方法。

会发生什么?

编辑:我不使用ARC,它将在iOS 3.1.2上运行

编辑:怎么样使用[NSValue valueWithNonretainedObject]?

根据这个:
https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcAPI.html

当对象被垃圾回收时,引用设置为nil。但是由于iOS没有垃圾回收,它会有悬挂指针吗?

编辑:发现了这个有用的帖子,所以我想我也将与其他学习此主题的人分享它:

http://cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html

最佳答案

如果您使用类似:

[NSThread detachNewThreadSelector: selctor target: theChildObject withObject: nil];

你没有问题。在线程完成执行之前,将保留目标(以及提供的对象)。如果不是,则需要安排适当的同步,例如在父级中有一个 child 的原子访问器。
// in the parent interface

@property (retain) id child; // Note no nonatomic

// in the child thread

id myChild = [parent child]; // myChild will be autoreleased in the current thread if the child property is atomic
if (myChild != nil)
{
[myChild retain]; // not strictly necessary as long as the current autorelease pool is not drained
// do the stuff you need with myChild
[myChild release];
}

关于objective-c - 在Objective-c中,如果在执行子方法的过程中父代取消分配子代会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9193736/

26 4 0