gpt4 book ai didi

objective-c - 属性赋值后自动释放

转载 作者:可可西里 更新时间:2023-11-01 06:12:36 30 4
gpt4 key购买 nike

我一直在考虑如何减少我的代码错误。在清理其他程序员的代码时,我已经多次看到这种情况,并且想知道我的多线程环境中的调用不安全的假设是否正确:

self.prop1 = [[[SomeClass alloc] init] autorelease];

我的想法是,如果在应用程序完成函数之前,另一个线程介入并释放 prop1,那么在下一个 runLoop 中,如果 prop1 未被另一个线程设置为 nil,则初始化的指针可能会再次释放线程。

Timeline:

*-----------------**-----------*
| | |
| | Thread 1 autoreleases prop1 when done with function
| |
| Thread 2 releases prop1
|
Thread 1 calls the above code and doesn't finish the function

我希望这对某人有意义,他们可以澄清或消除我的担忧。

最佳答案

我认为您不必比平时更担心线程安全。让多个线程写入同一个属性是一件坏事,应该避免(例如使用锁)。

你可以使用

摆脱自动释放
prop1 = [[SomeClass alloc] init];

相反,即不使用该属性。除非有必要,否则我从不使用自动释放,而在这种情况下则不需要。

关于objective-c - 属性赋值后自动释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6737028/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com