[解決済み】Objective-CやCocoaを書くときに使っているベストプラクティスは何ですか?[解決済み]
質問
については知っています。 HIG (しかし、Objective-Cを書くとき、より具体的にはCocoa(またはCocoaTouch)を使うときに、どんなプログラミングのやり方をしているのでしょうか。)
どのように解決するのか?
私がやり始めたことで、標準的ではないと思うことがいくつかあります。
1) プロパティの出現により、私はもう "_" をクラス変数 "private" の接頭辞として使用しないことにしました。 結局のところ、もし変数が他のクラスからアクセスされる可能性があるなら、そのためのプロパティがあるべきじゃないでしょうか? 私はいつも"_"という接頭辞がコードを醜くするとして嫌いでしたが、今ではそれを省くことができるようになりました。
2) プライベートなことといえば、プライベートなメソッド定義は、このようにクラスの拡張子の.mファイル内に配置するのがいいですね。
#import "MyClass.h"
@interface MyClass ()
- (void) someMethod;
- (void) someOtherMethod;
@end
@implementation MyClass
なぜ、部外者が気にしないようなことで.hファイルを乱雑にするのでしょうか?空の()は.mファイルのプライベートなカテゴリに対して機能し、宣言されたメソッドを実装しない場合、コンパイル警告を発します。
3) 私はdeallocを.mファイルの一番上、@synthesizeディレクティブのすぐ下に置くようにしました。 deallocするものは、クラスで考えたいことのリストの一番上にあるべきじゃないですか? iPhoneのような環境では特にそうです。
3.5) 表のセルでは、パフォーマンスのためにすべての要素(セル自身を含む)を不透明にすること。つまり、すべてにおいて適切な背景色を設定することです。
3.6) NSURLConnection を使用する場合、原則としてデリゲートメソッドを実装するのがよいでしょう。
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection
willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
return nil;
}
ほとんどの Web コールは非常に単調で、特に Web サービスのコールではレスポンスをキャッシュするのは例外的なことです。 このようにメソッドを実装すると、レスポンスのキャッシュが無効になります。
また、Joseph MattielloによるiPhone特有のTipsも興味深い(iPhoneのメーリングリストに掲載されたもの)。 他にもたくさんありますが、私が考える最も一般的に有用なものです(なお、いくつかの部分は、回答で提供された詳細を含めるために、オリジナルから少し編集されています)。
4) CoreLocationを使用する場合など、必要な場合のみ倍精度を使用する。定数の最後を'f'にすると、gccが浮動小数点数として保存するようになります。
float val = someFloat * 2.2f;
これは、ほとんどの場合
someFloat
が実際にダブルである場合、ストレージ上の'val'で精度を失っているので、ミックスモード演算は必要ない。 iPhoneでは浮動小数点数がハードウェアでサポートされていますが、それでも単精度に対して倍精度の演算を行う方が時間がかかる場合があります。 参考までに。
古い携帯電話では、計算のスピードは同じと思われますが、レジスタの中に倍精度よりも単精度の部品を多く入れることができるので、多くの計算では単精度の方が結果的に速くなるのです。
5) プロパティを次のように設定します。
nonatomic
. これらは
atomic
はデフォルトで、合成時にはマルチスレッドの問題を防ぐためにセマフォのコードが作成されます。99%の人はこれを気にする必要はないでしょうし、非アトミックに設定することでコードの肥大化を抑え、メモリ効率も良くなります。
6) SQLite は大きなデータセットをキャッシュするのにとてもとても高速な方法です。例えば地図アプリケーションは、タイルを SQLite ファイルにキャッシュすることができます。最もコストがかかるのはディスクI/Oです。 を送信することで、多くの小さな書き込みを避けることができます。
BEGIN;
と
COMMIT;
大きなブロックの間に 例えば、2秒間のタイマーを使っていますが、これは新しいサブミットごとにリセットされます。このタイマーが切れると、COMMIT; を送信し、すべての書き込みを一つの大きなチャンクで行うようにします。SQLiteはトランザクションデータをディスクに保存し、このBegin/Endラップを行うことで多くのトランザクションファイルを作成することを避け、すべてのトランザクションを1つのファイルにまとめます。
また、SQLがメインスレッドにあると、GUIがブロックされてしまいます。非常に長いクエリを作成する場合は、クエリを静的オブジェクトとして保存し、SQLを別スレッドで実行することをお勧めします。クエリ文字列のためにデータベースを変更するものは、必ず
@synchronize() {}
ブロックを作成します。 短いクエリの場合は、メインスレッドに残しておくと便利です。
SQLiteの最適化のヒントはこちらです。
http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html
関連
-
[解決済み] GLSL(OpenGL ES 2.0)で定数配列を定義する方法を教えてください。
-
[解決済み] Objective-Cの定数
-
[解決済み] Objective-Cの#importと#includeの違いは何ですか?
-
[解決済み] NSComparisonResultとNSComparator - これらは何ですか?
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] UIViewの下に影を描くには?
-
[解決済み】Xcodeの「ビルドとアーカイブ」メニューが無効になる件
-
[解決済み】iPhoneアプリでNSErrorを使用するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] コードサインエラーです。プロビジョニングプロファイル 'XX-YY-ZZ' が見つかりませんでした。
-
[解決済み] iPhone Simulatorで機内モードを再現する
-
[解決済み] KERN_INVALID_ADDRESSとKERN_PROTECTION_FAILUREの違いは何ですか?
-
[解決済み] クロストラック誤差の計算方法(GPS/コアロケーション)
-
[解決済み] どのように私はコードを使用して、iphoneでネイティブアラームクロック開くことができますか?
-
[解決済み】UIButtonのテキストと画像をimageEdgeInsetsとtitleEdgeInsetsで整列させる。
-
[解決済み】iOS 7 ナビゲーションバーのテキストと矢印の色
-
[解決済み】iPhoneシミュレーターのデータはどこに保存されるのですか?
-
[解決済み】iOS 7でUITableViewのセパレータを修正する方法は?重複
-
[解決済み】Objective-CやCocoaを書くときに使っているベストプラクティスは何ですか?[解決済み]