5分でつまむEffective Objective-C

5,124 views

Published on

名著 Effective Objective-C 2.0 の項目をいくつか紹介しました。
iOS_LT #8 で発表した資料です。

Effective Objective-C 2.0
http://www.amazon.co.jp/gp/product/4798134198

Published in: Technology
0 Comments
26 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,124
On SlideShare
0
From Embeds
0
Number of Embeds
138
Actions
Shares
0
Downloads
17
Comments
0
Likes
26
Embeds 0
No embeds

No notes for slide

5分でつまむEffective Objective-C

  1. 1. \5分でつまむ/ Effective Objective-C 2.0 iOS_LT #8 / @himara2
  2. 2. 自己紹介 ・平松 亮介 ・iOSエンジニア ・選挙アプリ Manifesto など
  3. 3. 本日のポイント 欲しくなった瞬間にポチる http://p.tl/Xp0r
  4. 4. 背景 ・Effective Objective-C 2.0 ・安定のEffectiveシリーズ ・レベルアップしたいiOSer向け, 52のtips ・これをベースにコーディング規約を作る会社も
  5. 5. #importより@classを使う #1
  6. 6. ・.h に #import するよりも ・ヘッダファイルが他ファイルにimportされたとき、 ・=> .m に #import, .h に@class宣言 が良い 不要な .h ファイルまでimportされてしまうのを防ぐ #1 #importより@classを使う
  7. 7. 配列はリテラルで使おう #2
  8. 8. NSArray *array = [NSArray arrayWithObjects:obj1, obj2, obj3, nil]; ・リテラル表記の利点 ・簡単に書ける #2 配列はリテラルで扱おう ・objectにnilが入ってた場合ちゃんと例外吐く NSArray *array = @[obj1, obj2, obj3];
  9. 9. #defineよりstatic constを使う #3
  10. 10. ・△ #define ALERT_TAG_WARNING 100 ・理由 #3 #defineよりstatic constを使う ・◎ static const NSInteger ALERT_TAG_WARNING = 100 ・型つきで宣言できる ・誤って別箇所で上書きした時にwarning出る ・他のファイルでも使いたい場合は extern つけて宣言
  11. 11. 列挙子enum #4
  12. 12. enum EOCConnectionState { EOCConnectionStateDisConnected, EOCConnectionStateConnecting, EOCConnectionStateConnected }; ・オブジェクトの状態定義に #4 列挙子enum ・テーブルのindexに enum TABLEVIEW_CELL_TYPE { TABLEVIEW_CELL_NOTICE, TABLEVIEW_CELL_FAQ, TABLEVIEW_CELL_VERSION };
  13. 13. インスタンス変数へのアクセス #5
  14. 14. ・self.str = @”abc”; #5 インスタンス変数へのアクセス ・NSLog(@”%@”, _str); ・writeする時はself経由でプロパティ属性を保持 ・readする時は直接読み出しで高速に(getter経由しない) ・setter / getter で処理を入れてる場合は注意が必要
  15. 15. Class Prefixのつけ方 #6
  16. 16. ・RHViewController × #6 Class Prefixのつけ方 ・2文字のprefixはAppleが予約している ・他と衝突しないよう3文字のprefixが推奨されている ・prefix はプロジェクト作成時に指定できる ・参考 #confwd でOSSでのObjective-Cの書き方について話してきた
  17. 17. descriptionとdebugDescription #7
  18. 18. ・description - NSLog で吐かれる #7 descriptionとdebugDescription ・debugDescription - デバッグ時のpo等で吐かれる iOS_LT #3 でデバッグについて発表しました
  19. 19. 非公開メソッドのプレフィックス #8
  20. 20. ・プライベートメソッドは p_XXX のようにすると◎ #8 非公開メソッドのプレフィックス ・デバッグ時や変更時に分かりやすいマーカー ・Appleは _XXX としているのでそれは避ける ・参考 Objective-Cが好きになるTips & Hackを勝手に補足
  21. 21. delegateの呼び出し部分をスッキリさせる #9
  22. 22. if ([_delegate respondsToSelector:@selector(some:)]) { [_delegate some:value]; } #9 delegateの呼び出し部分をスッキリさせる ①フラグを管理する構造体をつくる ②setDelegateでチェック ③呼び出し前はフラグのtrue/falseで判断 毎回checkする必要はない
  23. 23. #9 delegateの呼び出し部分をスッキリさせる ①フラグを管理する構造体をつくる ②setDelegateでチェック ③呼び出し前はフラグのtrue/falseで判断 struct { unsigned int didReceiveData: 1; unsigned int didFailedWithError : 1; } _delegateFlags; - (void)setDelegate:(id<SomeProtocol>)delegate { _delegateFlags.didReceiveData = [delegate respondsToSelector:@selector(didReceiveData:)]; } if (_delegateFlags.didReceiveData) { [_delegate some:data]; }
  24. 24. NSCacheを使おう #10
  25. 25. #10 NSCacheを使おう ・WebからDLした画像などのキャッシュに ・NSDictionaryでも可能だが、NSCacheの方がベター ・容量がしんどくなってきた時に自動開放してくれる ・開放のタイミングもこちらでコントロールできる
  26. 26. まとめ
  27. 27. この本すごい 良さそうです ね!!!!!!! http://p.tl/Xp0r \早速買う!/
  28. 28. 終わり

×