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

Mais conteúdo relacionado

Semelhante a 5分でつまむEffective Objective-C

ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
Fuminobu TAKEYAMA
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
Hiroshi Tokumaru
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
Yoichiro Sakurai
 

Semelhante a 5分でつまむEffective Objective-C (20)

Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
 
Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0Desktop app dev strategy for .net core 3.0
Desktop app dev strategy for .net core 3.0
 
Wolcome to swift
Wolcome to swiftWolcome to swift
Wolcome to swift
 
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
ExcelとPythonによる社会インフラシステムの設定ファイルの自動生成
 
The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#The Twelve-Factor (A|M)pp with C#
The Twelve-Factor (A|M)pp with C#
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法Objective-Cプログラマのためのswift導入法
Objective-Cプログラマのためのswift導入法
 
TestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテストTestFlight自動化でらくらくチームテスト
TestFlight自動化でらくらくチームテスト
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
 
Dll Injection
Dll InjectionDll Injection
Dll Injection
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 
CleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unityCleanArchitecture with AssemblyDefinition in unity
CleanArchitecture with AssemblyDefinition in unity
 
自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx自己紹介とC# Devkitについて.pptx
自己紹介とC# Devkitについて.pptx
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 

Mais de Hiramatsu Ryosuke

iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめ
Hiramatsu Ryosuke
 

Mais de Hiramatsu Ryosuke (12)

iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahooiOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
 
これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門これからはじめる SwiftPlayground入門
これからはじめる SwiftPlayground入門
 
6秒動画アプリ Vineの作り方
6秒動画アプリ Vineの作り方6秒動画アプリ Vineの作り方
6秒動画アプリ Vineの作り方
 
iOSアプリ開発にほんのり役に立つtips集
iOSアプリ開発にほんのり役に立つtips集iOSアプリ開発にほんのり役に立つtips集
iOSアプリ開発にほんのり役に立つtips集
 
Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm Xcodeを便利に使って爆速開発する #yxcm
Xcodeを便利に使って爆速開発する #yxcm
 
iOSアプリの特急申請 - Apple Expedited Review Request
iOSアプリの特急申請 - Apple Expedited Review RequestiOSアプリの特急申請 - Apple Expedited Review Request
iOSアプリの特急申請 - Apple Expedited Review Request
 
emoSound by たこ部 | OpenHackDay2
emoSound by たこ部 | OpenHackDay2emoSound by たこ部 | OpenHackDay2
emoSound by たこ部 | OpenHackDay2
 
AppSwitcherでアプリをユーザーファーストに
AppSwitcherでアプリをユーザーファーストにAppSwitcherでアプリをユーザーファーストに
AppSwitcherでアプリをユーザーファーストに
 
Bitbucket Pull Request 練習帳
Bitbucket Pull Request 練習帳Bitbucket Pull Request 練習帳
Bitbucket Pull Request 練習帳
 
iPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめiPhoneアプリ開発を楽に楽しくするサイトまとめ
iPhoneアプリ開発を楽に楽しくするサイトまとめ
 
Unix
UnixUnix
Unix
 
C-langage
C-langageC-langage
C-langage
 

5分でつまむEffective Objective-C