嵌套块和对self的引用

时间:2012-05-03 12:11:26

标签: objective-c ios objective-c-blocks weak-references

我有一个块,其中我使用self所以我声明了对self的弱引用:

__weak MyClass *weakSelf = self;

现在我的问题:

  1. 我在定义weakSelf时遇到错误,我不明白这应该是什么意思。:

    无法在自动变量上指定弱属性

  2. 在我的区块中,我将weakSelf传递给另一个区块,我不确定我现在是否必须再次执行相同的操作:

    __weak MyClass *weakWeakSelf = weakSelf;
    

    然后将weakWeakSelf传递给该区块?

3 个答案:

答案 0 :(得分:8)

这很有可能发生在您定位到iOS 4时。您应该将其更改为

__unsafe_unretained MyClass *weakWeakSelf = weakSelf;

答案 1 :(得分:3)

使用ARC

__weak __typeof__(self) wself = self;

没有ARC

__unsafe_unretained __typeof__(self) wself = self;

答案 2 :(得分:1)

使用libextobjc,它将易读且简单:

var tpl = compile("<b>{{text}}</b>");
// tpl = function (data) {
//   return "<b>" + (typeof data.text == "function" ? data.text() : data.text) + "</b>";
// }
tpl({ text: "ping" }); // "<b>ping</b>"
tpl({ text: "pong" }); // "<b>pong</b>"