EXC_BAD_ACCESS
是一个常见的错误,通常发生在 macOS 和 iOS 应用程序中,表示应用程序试图访问一个无效的内存地址。这个错误可能由多种原因引起,包括但不限于:
NSLock
)、信号量(如 dispatch_semaphore_t
)或其他同步机制来确保线程安全。以下是一个简单的示例,展示如何使用 NSLock
来同步线程访问共享资源:
#import <Foundation/Foundation.h>
@interface SharedResource : NSObject {
int value;
NSLock *lock;
}
- (void)increment;
- (int)getValue;
@end
@implementation SharedResource
- (instancetype)init {
self = [super init];
if (self) {
value = 0;
lock = [[NSLock alloc] init];
}
return self;
}
- (void)increment {
[lock lock];
value++;
[lock unlock];
}
- (int)getValue {
[lock lock];
int temp = value;
[lock unlock];
return temp;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
SharedResource *resource = [[SharedResource alloc] init];
// 创建多个线程来访问共享资源
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (int i = 0; i < 1000; i++) {
dispatch_async(queue, ^{
[resource increment];
});
}
// 等待所有任务完成
dispatch_sync(queue, ^{});
NSLog(@"Final value: %d", [resource getValue]);
}
return 0;
}
通过以上方法和工具,可以有效地诊断和解决 EXC_BAD_ACCESS
错误。
领取专属 10元无门槛券
手把手带您无忧上云