Rumah > Soal Jawab > teks badan
怪我咯2017-04-18 09:24:15
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