Objective-c-blocks

提供:Dev Guides
移動先:案内検索

Objective-Cブロック

Objective-Cクラスは、データと関連する動作を組み合わせるオブジェクトを定義します。 場合によっては、メソッドのコレクションではなく、単一のタスクまたは動作の単位を表すことだけが理にかなっています。

ブロックは、C、Objective-C、およびC ++に追加された言語レベルの機能であり、値のようにメソッドまたは関数に渡すことができるコードの個別のセグメントを作成できます。 ブロックはObjective-Cオブジェクトです。つまり、NSArrayやNSDictionaryなどのコレクションに追加できます。 また、外側のスコープから値をキャプチャする機能も備えており、他のプログラミング言語のクロージャーまたはラムダに似ています。

単純なブロック宣言構文

returntype (^blockName)(argumentType);

シンプルなブロック実装

returntype (^blockName)(argumentType)= ^{
};

これは簡単な例です

void (^simpleBlock)(void) = ^{
   NSLog(@"This is a block");
};

を使用してブロックを呼び出すことができます

simpleBlock();

ブロックは引数を取り、値を返します

ブロックは、メソッドや関数のように引数を取り、値を返すこともできます。

以下は、引数と戻り値を使用してブロックを実装および呼び出す簡単な例です。

double (^multiplyTwoValues)(double, double) =
   ^(double firstValue, double secondValue) {
      return firstValue * secondValue;
   };

double result = multiplyTwoValues(2,4);
NSLog(@"The result is %f", result);

型定義を使用するブロック

ブロック内でtypedefを使用する簡単な例を次に示します。 現在のところ、このサンプルは*オンラインコンパイラ*では機能しません*。 XCode を使用して同じことを実行します。

#import <Foundation/Foundation.h>

typedef void (^CompletionBlock)();
@interface SampleClass:NSObject
- (void)performActionWithCompletion:(CompletionBlock)completionBlock;
@end

@implementation SampleClass

- (void)performActionWithCompletion:(CompletionBlock)completionBlock {

   NSLog(@"Action Performed");
   completionBlock();
}

@end

int main() {

  /*my first program in Objective-C*/
   SampleClass *sampleClass = [[SampleClass alloc]init];
   [sampleClass performActionWithCompletion:^{
      NSLog(@"Completion is called to intimate action is performed.");
   }];

   return 0;
}

私たちはそれをコンパイルして実行しましょう、それは次の結果を生成します-

2013-09-10 08:13:57.155 demo[284:303] Action Performed
2013-09-10 08:13:57.157 demo[284:303] Completion is called to intimate action is performed.

ブロックは、iOSアプリケーションおよびMac OS Xでさらに使用されます。 そのため、ブロックの使用法を理解することがより重要です。