使用objc_getAssociatedObject在应用里出现崩溃,在此记录一下。
我在ViewController中做了测试,ViewController.m 在 Compiles Sources 里需要加上 -fno-objc-arc
#import "ViewController.h"
#import <objc/runtime.h>
@interface ViewController ()
@end
@implementation ViewController
//1.声明一个静态变量,用作关键字.此处也可以直接用一个字符串(但不推荐)
static char overViewKey;
- (void)viewDidLoad {
[super viewDidLoad];
//2.创建一个数组变量
NSArray * array =[[NSArray alloc] initWithArray:@[@"one",@"two",@"three"]];
//3.创建一个字符串变量;为了演示的目的,这里使用initWithFormat:来确保字符串可以被销毁
NSString * overview = [[NSString alloc] initWithFormat:@"%@",@"First three numbers"];
//4.关联代码操作(关键);第四个参数用 OBJC_ASSOCIATION_RETAIN_NONATOMIC,也可以尝试 OBJC_ASSOCIATION_ASSIGN 第六步会crash。
objc_setAssociatedObject(array, &overViewKey, overview, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
//5.释放overview
[overview release];
//6.访问已经被我释放的对象
NSLog(@"%p ~~ overview= %@",overview,overview);
//7.释放array
[array release];
//8.访问array
NSLog(@"%p ~~ array= %@",array,array);
//9.访问overview
NSLog(@"%p ~~ overview= %@",overview,overview);
}
@end
网友评论