iOS*_*com 1 multithreading cocoa-touch objective-c ios
我是Objective C的新手.我在许多iPhone/iPad应用程序中看到,在释放一个对象之后,它将被设置为nil.
[self.obj release]
self.obj = nil;
Run Code Online (Sandbox Code Playgroud)
我假设这样做是为了不让指针引用一个现在被释放的内存位置.现在假设以下情况:
//Thread #1 code
..some code
..some code
[self.obj release]
-------> Thread #2 runs //Thread #2 code
..some code
if (self.obj){
some code
}
self.obj = nil; <----- Thread #1 runs
Run Code Online (Sandbox Code Playgroud)
我想知道这种情况是否可能?如果是,是否有办法使释放/零原子?
这实际上并不完全正确
[self.obj release]
self.obj = nil;
Run Code Online (Sandbox Code Playgroud)
你应该写简单
self.obj = nil;
Run Code Online (Sandbox Code Playgroud)
这将调用将释放前一个实例的setter.