Block循环引用的例子

来源:互联网 发布:c语言实验室设备管理 编辑:程序博客网 时间:2024/06/05 08:46
////  main.m//  Block循环引用////  Created by 白天钰 on 2017/8/15.//  Copyright © 2017年 baitianyu. All rights reserved.//#import <Foundation/Foundation.h>typedef void (^blk_t) (void);@interface MyObject : NSObject {    blk_t blk_;        blk_t blk_2;        id obj_;}@end@implementation MyObject- (id)init {    self = [super init];        //通过Block语法生成在栈上的Block此时由栈复制到堆,并持有所使用的self,循环应用产生//  解决方式//    id __weak tmp = self;//    //    blk_ = ^{NSLog(@"self = %@", tmp); };        blk_ = ^{NSLog(@"self = %@", self); };        blk_2 = ^{NSLog(@"self = %@", obj_); };        blk_();        return self;}- (void)dealloc {    NSLog(@"dealloc");}@endint main(int argc, const char * argv[]) {    @autoreleasepool {                MyObject *o = [[MyObject alloc] init];                                    NSLog(@"%@", o);    }    return 0;}


 
原创粉丝点击