1 @implementation Person
2 - (void)dealloc
3 {
4 NSLog(@"Person---dealloc");
5 }
6
7 - (void)test
8 {
9 __unsafe_unretained Person *p = self;
10 self.block = ^{
11 //如果直接使用self.age,会造成内存泄漏,bloc会对它里面的对象进行强引用,而对__unsafe_unretained(或者__weak)修饰的对象不会进行强引用
12 NSLog(@"%d", p.age);
13 };
14 }
15 @end
16
17
18 @autoreleasepool {
19
20 // void (^myblock)() = ^{
21 // NSLog(@"调用了block8888");
22 // };
23 // __weak 和 __unsafe_unretained作用类似
24
25
26 // 默认情况下,block会对所用到的对象做一次retain操作
27 // block不会被__weak和__unsafe_unretained修饰的变量 做retain操作
28
29 Person *p = [[Person alloc] init];
30 p.age = 10;
31
32 __weak Person *p2 = p;
33 p.block = ^{
34 NSLog(@"调用了block8888--%d", p2.age);
35 };
36
37 p.block();
38
39 }
40 return 0;