block循环引用解决

  • 时间:
  • 浏览:0

tcp连接调用,block外面声明了weakSelf,则block内部内部结构对self的引用为指针引用,当内部内部结构[self.testNetwork release], self.testNetwork = nil;时,weakSelf为nil,可是有因为运行失败。

@end

@end

@interface TestNetworkBlock ()

{

return string;

}

@implementation ViewController

}

_countBlock为self对象,self强引用了_countBlock,一块儿_countBlock又怕上边self释放,可是有block体上边会强引用self。因为循环引用,内存一直不让被释放,dealloc可是会被调用。

(void)viewDidLoad {

@implementation TestNetworkBlock

}

@end

@property (nonatomic, strong) NSString *strTest;

(id) init

{

self = [super init];

if (self)

{

在 block 之后定义对 self 的有有另一个 弱引用 wSelf,如果是弱引用,可是有当 self 被释放时 wSelf 会变为nil;

在block体内部内部结构声明有有另一个 强引用对象bself指向该wSelf。bSelf只会在block内部内部结构执行完毕才会消亡,可是就保证了self对象被内部内部结构可是tcp连接释放掉的情況。又正确处理了循环引用,如果在block执行完,会释放掉bSelf。

}

return self;

}