:::info Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT) :::
为什么weak修饰的对象调用class方法时不报错?
- 因为weak修饰的对象销毁后,会自动把isa指针指向null, 向null发送消息不会报错
为什么第一次访问self.assignObject时不报错?第二次访问时报错?
- 因为第一次调用时候,self.assignObject指向的是obj2,此时对象没销毁,可以正常调用
- 第二次调用时,对象已销毁,但是self.assignObject没有将指针指向null,此时访问一个已销毁但是未置为null的对象就会报错(鬼知道指向的内存区域存储的是什么东西?)
* -[NSObject retain]: message sent to deallocated instance 0x600002000620**
@interface ViewController ()
@property (nonatomic, weak) NSObject *weakObject;
@property (nonatomic, assign) NSObject *assignObject;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSObject *obj1 = [NSObject new];
self.weakObject = obj1;
NSLog(@"%@", [self.weakObject class]);
NSObject *obj2 = [NSObject new];
self.assignObject = obj2;
NSLog(@"%@", [self.assignObject class]);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"%@", [self.weakObject class]);
NSLog(@"%@", self.assignObject);
});
}