0

私はJavaScriptの世界から来たObjective-Cに不慣れで、クラスに「コールバック」プロパティを定義しようとしています。JavaScriptの世界では、関数を気ままに渡すことに慣れていますが、Objective-Cはそれほど寛大ではないようです。

これが私がそれをやろうとした方法です(可能な限り単純化しようとしています):

@interface CallbackThing : NSObject
  @property (nonatomic) NSString *derpDerp;
  @property (nonatomic) SEL callback;
@end

その後、別のクラスで...

CallbackThing *testCallbackThing = [CallbackThing alloc] init];
testCallbackThing.callback = @selector(methodInThisCLass);

最後に別のクラスで...

if (self.testCallbackThing.callback != nil){
    [self.thatOtherClass performSelector:self.testCallbackThing.callback];
}

それはうまくいきます!私は自分自身をとても誇りに思っていました...まで...

「警告:selectorが不明なため、performSelectorがリークを引き起こす可能性があります!」

物事を読み込もうとすると、物事を行うための新しい方法はブロックを使用することであるように思われます...しかし、私が見た例はどれもこのシナリオではあまり意味がありません。

4

1 に答える 1

2

特定のユースケースが何であるかはわかりませんが、ブロックは簡単です。まず、ブロック タイプを宣言します。

typedef void (^MyBlock)(NSArray*, NSString*);

次に、SEL で行ったように、これをプロパティとして設定できます。

@property(nonatomic, copy) MyBlock block;

次に、ブロックを呼び出すだけで、それが実行されます。

self.block(someArray, someString);
于 2013-01-10T00:36:58.630 に答える