macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

ブロック構文(blocks)

Index>Objective-C>blocks

ブロック構文

ブロックはMacOS X10.6、iOS4.0から使うことができるAppleC言語拡張です。
C,Objective-C,C++で使うことができます。

他のプログラミング言語ではクロージャと呼ばれることがある機能です。

非同期通信などによく使われています。

ブロック構文を使うには「^」を使用します。

^myBlock
^(NSString *line, BOOL *stop)

ブロック内で使う変数は「__block」をつけて宣言します。ブロック外からブロック内に値を渡すことができあます。

__block


__block
__Block_copy()
__Block_release()





このドキュメントは書きかけです。随時更新します。


例文

#import "MyObject.h"

@implementation MyObject
- (IBAction)myAction:(id)sender
{
//NSStringの場合	
	//文字列の中に検索行があったらYESを返す。
	//ブロックストレージ
	__block BOOL found = NO;
	//データ
	NSString *multiLine = [NSString stringWithString:@"1st line\n2nd line\n3rd lin3\n" ];
	//検索文字列
	NSString *string = [NSString stringWithString:[myOutlet stringValue] ];//@"gamma";
	NSLog( @"retainCount = %u",[string retainCount] );
	[multiLine enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
		if ([line localizedCaseInsensitiveCompare:string] == NSOrderedSame) {
			*stop = YES;
			found = YES;
			NSLog(@"myBlock class= %@",[line className]);
		}	
	}];
	NSLog( (found)?@"YES":@"NO" );	
}
@end

関連リンク
Cocoaの日々:10分でおぼえるBlocksの書き方