我有一个高级类,它通过使用其他类来建立多个连接(顺序地,而不是并行地),而其他类又使用一个 NSURLConnection。
其中一个辅助类下载一组项目,它通过委托协议作为 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 来声明?
但我的主要问题是:我是否需要做任何事情,如果需要做什么以及如何保护 theArray 免受可能的同时访问?
highLevelClass 可能会从 theArray 中删除一个项目以响应计时器事件或用户操作。我的代码没有使用任何线程,因此其中的所有内容都可以是非原子的,并且不需要防止同时更新。但是,我相信 NSURLConnection 在内部会产生一个新线程,因此如果 theArray 在传递给 downLoading 类的块内,是否有危险的可能性?