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