29

これは、Objective-Cの弱化パターンで使用されます。

私の推測では、「weakSelf」という名前と自己の型 (例: MyViewController) を使用して、自己への弱参照を割り当てます。

それが正しく、あなたにとって明白に見える場合:私はこれを正しく理解したいと思っています. ありがとう。

4

4 に答える 4

28

私の推測では、名前weakSelfと自己を使用して自己への弱い参照を割り当てますtypeof(例: MyViewController)

はい、ほぼその通りです。の型はself(MyViewController*アスタリスク付きで) not になりMyViewControllerます。

単に書くのではなく、この構文を使用する背後にある考え方

MyViewController __weak *weakSelf = self;

コードのリファクタリングが容易になります。を使用typeofすると、コードのどこにでも貼り付けることができるコード スニペットを定義することもできます。

于 2014-05-19T16:27:12.243 に答える
11

libExtObjC を使用@weakify@strongifylibExtObjCを使用すると、ブロックの周りで時々行わなければならない「弱い強いダンス」を単純化するのに役立ちます。OPはこの記事を引用しています。

例!

__weak __typeof(self) weakSelf = self;
__weak __typeof(delegate) weakDelegate = delegate;
__weak __typeof(field) weakField = field;
__weak __typeof(viewController) weakViewController = viewController;
[viewController respondToSelector:@selector(buttonPressed:) usingBlock:^(id receiver){
    __strong __typeof(weakSelf) strongSelf = weakSelf;
    __strong __typeof(weakDelegate) strongDelegate = weakDelegate;
    __strong __typeof(weakField) strongField = weakField;
    __strong __typeof(weakViewController) strongViewController = weakViewController;

対...

@weakify(self, delegate, field, viewController);
[viewController respondToSelector:@selector(buttonPressed:) usingBlock:^(id receiver){
    @strongify(self, delegate, field, viewController);
于 2014-05-19T16:44:34.937 に答える
5

あなたの解釈は正しいです。ただ、そう書いてあると少し読みにくいと思います。の後にスペースを追加することをお勧めしますtypeof(self):

__weak typeof(self) weakSelf = self;
于 2014-05-19T16:29:29.043 に答える