我正在阅读关于__block variables的文档,并考虑了使用__block的情况。对我来说,这似乎是我需要它在两种情况下:为什么__block变量不被保留(在非ARC环境中)?
- 为了纪念一个变量作为读写块
- 内使用时,为了避免块内引用自当保留周期
从表面上看,这两件事似乎并不相关。我认为,__block变量不被保留为我需要记住的避免保留周期的特定用例的更多技巧。
我想知道,是否有一个更重要的建筑原因,为什么他们不能被保留?我认为其他关键字可能会更清楚地表明这一点,以免混淆上面列出的两个功能。
更新 -
我应该提到这是不使用ARC的代码。我现在看到__block变量实际上保留在ARC中。
您只使用'__block'作为第一个。您可以使用'__weak'而不是'__block'来避免保留周期。 – rmaddy
另外,你在哪里得到__block变量不被保留的想法? ARC会自动保留它们,就像常规变量一样。 –
在ARC之前,__block变量确实不被保留为避免保留周期的机制。这一点随着ARC而改变,并记录在转换到ARC版本说明中。 –