背景资料:
我编写了一个包含 2 个画廊的 iOS 应用程序:一个本地画廊和一个服务器画廊。当用户更新服务器图库并将其合并到他的本地图库时,应用程序应该只下载新图像。
ImageEntity
为了最大限度地减少内存消耗,我保存图像并用具有以下属性的类的实例填充数组: fileName、filePath和votingStatus。
我尝试使用以下逻辑来检查图像是否已经存在:
for (ImageEntity *imageEntity in self.serverImagesArray) {
if (![self.localImagesArray containsObject:imageEntity]){
[self.localImagesArray addObject:imageEntity];
}
}
但是因为每个实体都是一个单独的对象,所以它总是会被添加。但是,每个实体都有一个唯一的文件名。
问题:
我能否以某种方式扩展该[NSArray containsObject:]
函数以检查数组中的一个对象是否具有等于“someValue”的属性?(当我将 Cocoa-Bindings 与 ArrayController 结合使用时,我可以分配数组元素的属性——我想访问与此类似的属性)。
我知道我可以使用将本地数组的每个实体与服务器数组上的每个元素进行比较。不过,我必须进行 O(n^2) 比较,并且图库可能包含数百张图像。
额外的问题:我是否已经在没有意识到的情况下这样做了?有没有人有关于苹果实现这个功能的细节?是否有一些花哨的实现,或者他们只是在比较每个元素的数组上迭代?