78

後で使用できるように、objective-cブロックをプロパティに保存したいと思います。どうすればいいのかわからなかったので少しググってみましたが、この件についての情報はほとんどありません。しかし、私は最終的に解決策を見つけることができ、私のような他の初心者のために共有する価値があるかもしれないと思いました。

当初、Block_copyとBlock_releaseを使用するには、プロパティを手動で作成する必要があると考えていました。

幸い、ブロックはNSObjectsであり、- copy/は/- releaseと同等であることがわかりました。だから私はセッターとゲッターを自動生成するために使用することができます。Block_copyBlock_release@property (copy)

4

3 に答える 3

136

編集:ARC用に更新

typedef void(^MyCustomBlock)(void);

@interface MyClass : NSObject

@property (nonatomic, copy) MyCustomBlock customBlock;

@end

@implementation MyClass

@end

MyClass * c = [[MyClass alloc] init];
c.customBlock = ^{
  NSLog(@"hello.....");
}

c.customBlock();
于 2010-11-02T20:41:08.830 に答える
102

または、typedefなし

@property (copy, nonatomic) void (^selectionHandler) (NSDictionary*) ;

于 2011-10-13T10:27:37.657 に答える
9

これについての非常に良い説明は、83ページから始まるWWDC 2012セッション712にあります。ARCでブロックを保存する正しい方法は、次のとおりです。

@property(strong) my_block_type work;

保持サイクルに注意してください。解決する良い方法は、ブロックが不要になったときにブロックをnilに設定することです。

self.work = nil;
于 2012-08-02T11:05:51.860 に答える