2011-01-05 10 views
3

申し訳ありませんが、これは少しの質問のように聞こえますが、ObjCやiOSではまだ比較的新しいですが、ソフトウェア開発には新しくないですが、ドキュメントを読む/さまざまなトピックについては、私は確信していない特定のフレーズを聞いて、誰かが次の用語の非常に簡単な説明を与えるために瞬間を取ることができるか、またはそれらのための良い参照を教えてください。用語の質問Objective-C/iOS

私はそれに固執していると思っていますが、私が考えていることは、私がAppleのドキュメントの流れをよく理解できるように、私を訂正するための手段だと思っています。

1)シングルトン

PHPで完全に静的なクラスにおそらく類似

は、いかなるインスタンスメソッド

を有していない

2)モデル、ビュー、コントローラ(MVC)組織 - 特異的 'モデル' 成分

私は広い定義が物事を別々に保っていることを知っています、これはあなたが考えていると思うのは、プログラマチックまたはインターフェースビルダーのいずれかで画面に出力するようにビルドしたものです。コントローラはメッセージ(クリック、タップ等)を表示し、多くの場合には、ビューに情報をプッシュしますビューとコントローラを形成する.xibと.h/.mのペアは、同じファミリの一部です(つまり、MyViewController.h/.m/.xib)。私の推測のモデルは、ソースから/へデータを読み書きするための別のハンドラです。たとえば、SQLiteデータベースやXMLフィードからデータをロードして返すことができるメッセージを送信するクラスです。

3)オブジェクトタイプについて説明するとき、*の正しい場所はどこですか?

NSString *myVar; 
NSString* myVar; 
NSString * myVar; 

私は*ヘッダーなどのメッセージを入力した後に行く理解:

彼らは同じことを意味ように私は、*はポインタを意味知っているが、私は見て、以下のように書かれたものを見てきました:

- (void)myMessageHandler:(NSString *)str; 

4)NSIntegerと通常のintを使用するタイミングは?

私は馬鹿に見えるかもしれませんが、私はそれをいつ使うべきかわからないので、私はそれを尋ねなければなりません。

5)再利用可能なエンティティ識別子

解除queingは/再利用キューを経由して動作するオブジェクトを作成し、私は「cellIdentifier」@のUITableViewCellのための各時間(例えば使用したのと同じ、同一の識別子を、参照

)。しかし、私が見ているのは、単にキューに格納されるのではなく、関連する行データでセルがリセットされるということです。この混乱は、HTMLのテーブルから各行をアドレス指定する場所になり、DOMをトラバースするか、各行はユニークです。

これはメモリ管理の問題で、デフォルトのクラスを使用している場合には何が起こっているのか気づかないでしょうが、別のカスタムクラスを使用していた場合は、それぞれのタイプ親クラスインスタンス(例:UITableView)ごとにしかプロパティをリセットしなくても、必要なメモリの総量は最小限に抑えられ、インスタンス化時間はループから一度だけ削除されるため、

複数のビューコントローラが互いに押し付けられているアプリがある場合、特定のビューに関連する固有の識別子を使用することをお勧めします。カスタムサブクラスを使用していた場合、識別子は重複を引き起こさず、恐らくメモリリークを引き起こすことになる。

たとえば、UITableViewは、注釈が選択されたときにUITableViewをプッシュするマップをプッシュします。もし私が両方のUITableViewの再利用可能なアイデンティティ名として "cellIdenfier"を使用した場合、システムが潜在的に私の間違ったタイプをデキューの間に返さず、やや奇妙な出力を引き起こすでしょうか?

+2

リソースとしてStack Overflowのエモに反して、一度に1つの質問だけを投稿するべきです。 :-) –

+0

謝罪、私は5つの同時投稿でシステムを混乱させるだろうと思ったが、それらを一緒にグループ化することは、質問に完全に答えるために必要なスキルセットを持つユーザーを引き付けることはないかもしれない。私は将来、別々の投稿をすることを忘れないだろう。 – JamesB

+1

質問3の答えでは、いずれも問題ありません。私はそれがその型よりも名前の方がポインタであるという事実を関連づけるので、名前の隣の右側の方が好きです。 –

答えて

1

middaparkaさんから言われたように、おそらく質問を分割する必要がありますが、私は1-3に答えることができます。

シングルトンは、プログラム全体にクラスのインスタンスが1つしかないという意味のデザインパターンです。これは、通常、静的変数(静的変数として格納されている)を返すか、存在しない場合は新しいものを作成する静的getInstanceメソッドで実装されます。デザインパターンの参考にしておくとよいでしょう。

MVCの場合、モデルの考え方は本質的に正しいです。モデルはデータが格納される場所です。繰り返しますが、詳細については、デザインパターンリファレンスを参照してください。

*がどこにあるのかは、コンパイラがどのような方法でも受け入れられるため、主にスタイルの問題です。私は個人的にはタイプの隣に置くことを好みますが、それは技術的にタイプの一部ですが、私が働いた場所のほとんどは識別子の隣に置いています。私はそれを識別子の隣に置くことの根拠は、*の他の用途の1つがポインタを間接参照することであると考えています。その場合は変数とグループ化するのが理にかなっており、視覚的に一貫性を持たせたいと思っています。私は、乗算演算子として使用されたときには、*の周囲のスペースしか見ていませんでした。

+0

カール、泥の一部をクリアしてくれてありがとう、私はあなたのアドバイスを取って、後で別の質問として4と5を再投稿し、私の読書をさらに進めるためにmvcデザインパターンを検索します。答えを探している他の読者がチェーンを辿るのが難しいかもしれないので、スプリット質問の必要性を完全に理解しています。レッスンは私の友達をよく習いました。 – JamesB

+0

@JamesB:これらの部分を再投稿するときは、ここで削除することを忘れないでください。そうすれば、人々は便利な回答が後である場所を簡単に見つけることができます。 –

3

答えを受け入れたにもかかわらず、完了していないので追加します。

カールのシングルトンの定義は、私が懸念している限りお金の上にあります。

モデルはデータを格納するオブジェクトではなく、ビジネスロジックです。

*がどこに行くかについては、それはスタイルの問題ですが、それがCの型(Objective-Cはスーパーセット)の一部であると言うのは微妙に間違いです。これは、簡単に次のように示されている:

int* foo, bar; 

それは2種類int*の変数が、int型(FOO)とINT(バー)へのポインタを宣言していません。したがって、という技術的には、に*を付けてください。しかし、私はKarlと同じ規約を使用し、コンマ区切りリストで変数を決して宣言しないことで上記の問題を回避します。

NSIntegerとjust plain intを使用するタイミングは?

Cocoa APIドキュメントには、いつもそれを使用する必要があります。そうでなければ、プレーンなintとは対照的に、それを使用することに全く利点はありません。 int型の特定の幅を保証する必要がある場合は、stdint.h(int32_t、int64_tなど)のC99標準を使用する必要があります。特定の幅を保証する必要がない場合は、Cocoa APIがNS(U)Integerを提供する場所を除いて、組み込み型を使用することもできます。NS(U)整数を(符号なし)intにキャストすると、一部のアーキテクチャ(たとえばx86_64)で切り捨てられる危険性があります。

再利用可能なエンティティ識別子

AのUITableViewは、画面上に現在表示されているすべてのセルのためのインスタンスを必要とします。セルをインスタンス化するのは高価な場合があります(たとえば、NIBをロードするにはディスクに移動する必要があるかもしれません)。そのため、セルが表示されなくなった後で廃棄するのではなく、破棄されたセルのキューに入れます。新しいセルが必要な場合は、未使用のセルを最初からインスタンス化するよりも、そのキューから解放する方がはるかに高速です。

テーブルビューに異なるタイプのセルがある可能性があるため、再利用識別子が必要です。例えば1つの行にテキストフィールドがあり、別の行に日付ピッカーがある可能性があります。したがって、テーブルビューがテキスト行のセルを要求すると、日付ピッカーを持つセルを与えるのは良いことではありません。

+0

NSInteger vs int、インスタンスメソッド、デリゲートプロトコルなどがNSIntegerを指定していればそれを使用してください。そうでなければ、私の選択です。識別子の場合、表内のすべてのセルが同じであれば、同じ識別子が問題ありません。データまたはビューのタイプが異なる場合は、異なる識別子を使用します。もし私が正しいなら、それは完璧なセンスです。 – JamesB

+0

@JamesB:どちらも正しい。 – JeremyP