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;