9

私はObjectiveCの初心者で、^演算子は何を理解しようとしていますか?いくつかのソースコードを調べているときに、次の構造を見ました。

dispatch_once(&onceToken, ^{
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(20.f, 13.f), NO, 0.0f);

    [[UIColor blackColor] setFill];
    [[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 20, 1)] fill];
    [[UIBezierPath bezierPathWithRect:CGRectMake(0, 5, 20, 1)] fill];
    [[UIBezierPath bezierPathWithRect:CGRectMake(0, 10, 20, 1)] fill];

    [[UIColor whiteColor] setFill];
    [[UIBezierPath bezierPathWithRect:CGRectMake(0, 1, 20, 2)] fill];
    [[UIBezierPath bezierPathWithRect:CGRectMake(0, 6,  20, 2)] fill];
    [[UIBezierPath bezierPathWithRect:CGRectMake(0, 11, 20, 2)] fill];   

    defaultImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

});

そして、私は^とは何か知りたいのですが?

4

4 に答える 4

17

^Objective-C内のブロック定義の開始を示しました。

こちらをご覧ください:http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/bxGettingStarted.html#//apple_ref/doc/uid/TP40007502-CH7-SW1

このコンテキストでは、^は演算子ではなく、Objective-Cの構文の一部であることに注意してください。@ Mikeの反対票の回答は、厳密には「^演算子」の正しい定義です。

于 2013-03-25T14:24:56.223 に答える
6

これは、Block InObjectiveCと呼ばれます

構文:

returnType (^variableName)(parameters);

Akiel Khanによるチュートリアルから逐語的に引用(ここで別の優れたチュートリアルを見つけることができます):

  • ブロックリテラルは「匿名」(つまり名前なし)です
  • カレット(^)記号
  • 戻り型を指定する必要はありませんでした。コンパイラーはそれを「推測」できます。必要に応じて、明示的に言及することもできます。

これは公式ドキュメントです。詳細についてはお読みください。

于 2013-03-25T14:32:35.380 に答える
4

これは、ブロックを開始するためのシグナルです。

いくつかのチュートリアルブログまたは記事を読むことで、ブロックの詳細情報を見つけることができます。

ブロック–iOS4での興味深いObjective-Cの追加

iOS5チュートリアルでブロックを使用する方法

ブロックの基本的なことを知っているときは、ブロックに関するAppleのドキュメントを参照できます。

実際、ブロックの最も一般的な使用法は、GCD(Grand Central Dispatchの略で、問題のケースです)、UIViewのアニメーション、およびコールバックのようなものです。これは、最新のObj-Cプログラミングで非常に便利で一般的です。

于 2013-03-25T14:28:26.660 に答える
2

オブジェクトcにブロックを作成するために使用されます。ブロックは、cの関数ポインタと同じです。これはあなたを助けるかもしれません

このリンクをチェックアウト

于 2013-03-25T14:27:31.767 に答える