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

标签 objective-c ios properties release autorelease

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

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/

相关文章:

iphone - 如何确定设置是否存储在iOS的应用程序中?

html - CSS body 属性无法正常工作

apache-spark - 将外部属性文件添加到spark中的类路径

objective-c - 添加下一页 segue 后 WatchKit 界面 Controller 滚动太多

ios - Controller 之间的导航 - 黑屏

objective-c - 如何将数据存储到 iPhone 应用程序

javascript - 解构一个属性为 "delete"的对象

objective-c - 使用 substringWithRange : gives "index out of bounds" 提取字符串

ios - 如何 'reset'在IOS中用drawrect制作的全图 View ?

ios - 无法使用 hitTest : WithEvent: 选择 tableView 单元格