私のモデルクラスはインターネットからデータを取得する必要があります。だから私は別のスレッドで実行することにしたので、UIはフリーズしません。 だからオブジェクトは、それが最初にこのタイプの方法を使用してモデルを要求するいくつかのデータを希望する場合:他のスレッドのメインスレッドでメソッドを実行する
- (void)giveMeSomeData:(id)object withLabel:(id)label {
objectAsking= object;
theLabel= label;
NSThread* thread= [[NSThread alloc] initWithTarget:self selector:@selector(getTheDataFromInternet) object:nil];
[thread start];
}
- (void)getTheDataFromInternet {
//getting data...
theData= [dataFromInternet retain]; //this is the data the object asked for
[self returnObjectToAsker];
}
- (void)returnObjectToAsker {
[objectAsking receiveData:theData withLabel:theLabel];
}
私はまだ初心者だとして、それは良好なパターンだ場合、あなたが私に言うことができますか?
ありがとうございます!
作成したものをメモリ管理規則に従ってリリースすることを忘れないでください。 http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.htmlあなたが示したコードから、あなたは所有していなければなりません。もしGCの下で走っていなければ、 'thread'と'データ。 –
また、 'getTheDataFromInternet'のように同期しているようです。そうしないと、データを取得するのに必要なミリ秒/秒/分/時間/日の間、UIがブロックされます。それがどれほど小さいか、あなた自身のインターネット接続がどれほど素晴らしいかは関係ありません。あなたのユーザーは、データを待っている間あなたのアプリがロックアップしているのを見るでしょう。代わりに非同期的に受信するようにNSURLConnectionを作成(および所有)します。http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/(少なくとも)NSProgressIndicatorを使用して進捗状況を報告します。 –
もちろん、わかりやすくするためにこれらの行を記述しないことにしました; –