解决 —— 互斥锁:
// 1、创建锁
NSLock *lock = [[NSLock alloc]init];
// 2、加锁
[lock lock];
//在这里添加要保护的代码
// 3、解锁
[lock unlock];
加锁方式2(不推荐)
@synchronized(锁对象 ) {//锁对象,任何对象都可以
// 在这里添加要保护的代码
}
@synchronized(锁对象) { // 需要锁定的代码 }
注意:锁定1份代码只用1把锁,用多把锁是无效的
OC在定义属性时有nonatomic和atomic两种选择
atomic:原子属性,为setter方法加锁(默认就是atomic)
nonatomic:非原子属性,不会为setter方法加锁
atomic加锁原理
@property (assign, atomic) int age;
- (void)setAge:(int)age
{
@synchronized(self) {
_age = age;
}
}
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
- (void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(id)arg waitUntilDone:(BOOL)wait;
本文探讨了多线程环境中资源共享可能导致的问题,并介绍了互斥锁的两种实现方式及其使用注意事项。此外,还讨论了原子性和非原子性的区别,以及在iOS开发中如何合理选择。

被折叠的 条评论
为什么被折叠?



