美文网首页
使用objc_getAssociatedObject关联对象

使用objc_getAssociatedObject关联对象

作者: 风起时候 | 来源:发表于2019-11-20 11:09 被阅读0次

使用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

相关文章

网友评论

      本文标题:使用objc_getAssociatedObject关联对象

      本文链接:https://www.haomeiwen.com/subject/xtxoictx.html