私は、それぞれがNSURLConnectionを使用する他のクラスを使用して、いくつかの接続を(順次、並列ではなく)行う高レベルのクラスを持っています。
これらの補助クラスの1つは、NSArrayとしてデリゲートプロトコルを介して高レベルクラスに渡すアイテムの配列をダウンロードします。高レベルクラスには独自のNSArrayがあり、ダウンロードしたアイテムをその配列に追加します。
継承階層にいくつかのクラスがあり、各クラスはさまざまなコンテンツのダウンロードまたはアップロードを担当し、すべてがそれぞれのプロトコルを実装している高レベルのクラスによって制御されます。ただし、この継承階層に複数のクラスを含めることは、おそらくやり過ぎであり、物事を単純化することを検討していると思います。複数のオブジェクトを含める代わりに、オブジェクトを減らして、高レベルのクラスがそれらに提供することで動作の違いを得ることができるかどうか疑問に思いました。コンテンツのダウンロード時に実行されるブロック。
したがって、たとえば、高レベルのクラスは、ブロックとしてダウンロードされるNSArrayを解析および作成するためのコードを提供します。
スケッチ疑似形式:
@interface highLevelClass : NSObject
@property (strong, nonatomic) NSArray *theArray;
@property (strong, nonatomic) downloadingClass *theDownloader;
- (void) doDownload;
@end
@interface downloadingClass : NSObject
@property (strong, nonatomic) NSURLConnection *connection;
- (void) downloadArrayWithBlock:(void(^)()) theBlock;
@end
- (void) doDownload {
[theDownloader: downloadArrayWithBlock:^ {
[self.theArray appendObject: someObject];
}
}
downloading class would execute the block in its implementation of NSURLConnectionDelegate:connectionFinishedLoading.
まず、highlevelClassのtheArrayを__blockを使用して宣言する必要があると思いますか?
しかし、私の主な質問は、何かをする必要がありますか?もしそうなら、可能性のある同時アクセスからアレイを保護するために、何をどのように行う必要がありますか?
highLevelClassは、タイマーイベントまたはユーザーアクションに応答して、theArrayからアイテムを削除する場合があります。私のコードはスレッドを使用していないため、その中のすべてが非アトミックである可能性があり、同時更新から保護する必要はありません。ただし、NSURLConnectionは内部で新しいスレッドを生成すると思います。したがって、theArrayがdownLoadingクラスに渡されるブロック内にある場合、危険の可能性はありますか?