我相信我遵守规则但仍然存在问题
我的班级 init 包含一个这样的块:
HTTPChunkReceiveBlock chunkBlock = ^(id connection, NSData *data) {
NSLog(@"Hi there!!");
};
我将此块传递给我的班级所持有的HttpConn obj:
operation_ = [[HttpClient sharedClient] performChunkedRequest:url
chunkHandler:chunkBlock];
现在出现问题:我的对象永远不会被释放!!
问题似乎是由于引起的,因为HttpConn保留了一个指向块的指针,但我想提两点:
chunkBlock_ = [chunkBlock copy];
修改
额外信息: 我已经确认,如果我正在释放操作_ ,那么我的对象将被解除分配:
reader.operation_ = nil;
reader = nil; //previous line allows 'dealloc' to be called
现在重复一个问题:操作没有获得读者 self 的指针,它只保存了一个不引用self的块的副本!
答案 0 :(得分:1)
好的,我会回答我自己的问题,以便其他人不会遇到同样的问题。 @DarkDust实际上是正确的。有一条小线我完全无视:
**retriesNumber++;**
它看起来像一个无辜的句子,但因为 retriesNumber 是该类的成员,它实际上意味着
(INVISIBLE strong pointer to self)->retriesNumber
因此解决方案是将其声明为属性(相对于成员ivar),以便我们可以使用 self 来访问它,然后编写:
pSelf->retriesNumber++;
谢谢你们的快速支持,我希望其他人也能从中学习!