2012-11-15
RAII in Objective-C with ARC
最近のObjective-CはARCというオブジェクトポインタをスマートポインタにする機能があり、これのおかげでiPhoneアプリの開発ではRAIIができる。つまり、不要になったオブジェクトはその瞬間にデストラクタ(-dealloc)が呼ばれるため、デストラクタ内でリソースの開放を行なえる。
// デバイスのネットワークインジケータをRAIIで制御する @interface NetworkActivityGuard : NSObject @end @implementation NetworkActivityGuard - (id)init // コンストラクタ { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; return [super init]; } - (void)dealloc // デストラクタ { [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; } @end
使い方:
-(void)foo { // ネットワークインジケータを表示する NetworkActivityGuard *guard = [[NetworkActivityGuard alloc] init]; // 処理をする (ここでは単に2秒後にクロージャを呼ぶ) double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_after(popTime, dispatch_get_current_queue(), ^(void){ // このブロックに変数をバインドしてクロージャにするため、 // guardをかならずブロック内で参照する必要がある! (void)guard; // このクロージャが破棄されるとき // guardのリファレンスカウンタもひとつ減る // 他にguardを参照しているものがなければ // [guard dealloc] が呼ばれる }); }
エキスパートObjective-Cプログラミング ?iOS/OS Xのメモリ管理とマルチスレッド?
- 作者: 坂本一樹
- 出版社/メーカー: インプレスジャパン
- 発売日: 2011/11/18
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 343回
- この商品を含むブログ (22件) を見る
トラックバック - http://d.hatena.ne.jp/gfx/20121115/1352938684
リンク元
- 225 http://localhost
- 108 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCcQFjAA&url=http://d.hatena.ne.jp/gfx/20091210/1260436683&ei=MD2kUNHhHcrHmAWCxoDIBw&usg=AFQjCNHWjLTAr5XpEX833Y4YkajXac9zeg
- 68 http://reader.livedoor.com/reader/
- 56 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CD8QFjAB&url=http://d.hatena.ne.jp/gfx/20090224/1235449381&ei=gUikUMe0Dc-trAfqpIHwAw&usg=AFQjCNH3G8VVLIEANUCsgcQBnhVPlyIEhw&sig2=ID7UfFhh3swtiE_n-1oSdw&cad=rja
- 36 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CC8QFjAC&url=http://d.hatena.ne.jp/gfx/20090511/1242032719&ei=qEGkUPS-MoXwmAWduoGIAg&usg=AFQjCNGwHdh06sCG53pobWBpvmleitFZKA
- 30 https://www.google.co.jp/
- 26 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CEAQFjAD&url=http://d.hatena.ne.jp/gfx/20101112/1289548718&ei=a2CkUI-QBuOJmQXEz4EQ&usg=AFQjCNE--NqWpHq4rgfBntFaA85qxjarVg
- 24 http://t.co/slxzcbAu
- 22 http://blog.dealforest.net/2012/12/benchmark_ios_serializer/
- 21 http://b.hatena.ne.jp/search/tag?q=objective-c


