在Objective-C中锁定实例变量

App*_*Dev 10 concurrency locking objective-c class-variables ios

什么应该是iOS应用程序中防止实例变量被另一个用户更改的最佳方式?@synchronized(self)指令的使用应该足够吗?

提前致谢

Ano*_*dya 5

如果你想要一个对象被阻塞,以便没有两个线程同时使用它,那么@synchronize就是一种方式.但这并不能使其成为线程安全的.

您还可以使用GCD(大中央调度)对同一


Kha*_*azi 1

如果唯一的目的是能够访问

self.myString; //getter
Run Code Online (Sandbox Code Playgroud)

和,

self.myString=aString; //setter
Run Code Online (Sandbox Code Playgroud)

最好的方法是将其声明为原子的,例如:

@property (atomic, strong) NSString* myString;
Run Code Online (Sandbox Code Playgroud)

这将确保在多线程环境中,线程 1 设置和获取 myString 不会受到线程 2 对其执行某些操作的影响。