拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
Kawalan peringkat kaedah tidak mempunyai pengubah suai peringkat bahasa dan blok kod boleh dikunci.
Terdapat banyak cara untuk mengunci.
@disegerakkan
NSLock
pthread_mutex
dispatch_semaphore
OSSpinLock
@interface A : NSObject { NSObject _lock; } - (void)func { @synchronized(_lock) { // do something } }
- (void) func { [_lock lock]; // do something [_lock unlock]; }
@interface A : NSObject { pthread_mutex_t lock; } - (instance)init { // 省略 pthread_mutex_init(&_lock, NULL); } - (void)func { pthread_mutex_lock(&lock); // do something pthread_mutex_unlock(&lock); }
@interface A : NSObject { dispatch_semaphore_t _semaphore; } - (instance)init { // 省略 _semaphore = dispatch_semaphore_create(1); } - (void)func { dispatch_semaphore_wait(_semaphore, DISPATCH_TIME_FOREVER); // do something dispatch_semaphore_signal(_semaphore); }
Memandangkan kunci putaran tidak lagi selamat dalam iOS, ia tidak akan diperkenalkan di sini untuk butirannya, anda boleh membaca blog ini OSSpinLock tidak lagi selamat
GCD+block untuk
.
Kawalan peringkat kaedah tidak mempunyai pengubah suai peringkat bahasa dan blok kod boleh dikunci.
Terdapat banyak cara untuk mengunci.
@disegerakkan
NSLock
pthread_mutex
dispatch_semaphore
OSSpinLock
1. @disegerakkan
2. NSLock
3. pthread_mutex
4. dispatch_semaphore
5.OSSpinLock
Memandangkan kunci putaran tidak lagi selamat dalam iOS, ia tidak akan diperkenalkan di sini untuk butirannya, anda boleh membaca blog ini
.OSSpinLock tidak lagi selamat
GCD+block untuk
.