0

要为块中的对象定义弱引用,我使用类似这样的东西

MyViewController *__weak weakSelf= self;
UILabel *__weak weakLabel=ALabel;

///the block code with some examples
up2.completionBlock = ^(NSDictionary *headers, NSString *responseString) { 

   [weakSelf aMethodInTheController];
   [weakLabel setHidden:NO];


};

我对 bool 有疑问,我如何声明对 bool 的弱引用以避免警告“在此块中强烈捕获自我可能导致保留周期”?不适用于:

Bool *__weak weakFlag=Aflag;
4

1 回答 1

0

好吧,您在这里尝试做什么并不明显。

有两种可能性。也许您需要将参数传递给块。所以有一个类型的变量boolor BOOL(它们在这个问题的目的上是相似的)并且你想在块中使用它。

那么,好消息!你根本不需要任何东西。只需声明

  BOOL some_bool = (YES or NO or some calculation);

并稍后在块中使用它。这是因为布尔类型是原始的(它们是某种整数)并且不够聪明,无法参与内存管理。所以编译器不用太担心;它只是在创建块时获取此变量的值并将其复制到块中。

这是相关文档

除非您另外指定,否则仅捕获值。这意味着如果您在定义块的时间和调用它的时间之间更改变量的外部值,...

或者,也许您想要一个变量,该变量可以采用逻辑值,并且可以在创建块和运行块之间的时间内被其他对象更改。在这种情况下,您需要

  1. 将布尔值包装成NSNumber
  2. 将对此的强引用存储NSNumber在对象中的某处
  3. 将其作为指向块的弱指针传递

例如

// somewhere in the interface
@property NSNumber *someImportantFlag

 __weak NSNumber *weakFlag = someImportantFlag;
 ... ^{ ... if(weakFlag.boolValue) ... weakFlag = @(NO); ...} 

感谢让我重新阅读问题和答案的评论者。

于 2013-09-27T16:06:51.267 回答