应该释放一个对象并将其设置为nil是原子的吗?

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)

我想知道这种情况是否可能?如果是,是否有办法使释放/零原子?

And*_*rsK 5

这实际上并不完全正确

[self.obj release]
self.obj = nil;
Run Code Online (Sandbox Code Playgroud)

你应该写简单

self.obj = nil;
Run Code Online (Sandbox Code Playgroud)

这将调用将释放前一个实例的setter.