arc中的block

 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;

 

posted @ 2013-11-25 17:10  yyh123  阅读(224)  评论(0编辑  收藏  举报