代码之家  ›  专栏  ›  技术社区  ›  Agnius Vasiliauskas

检测ObjC中NSArray的更改

  •  3
  • Agnius Vasiliauskas  · 技术社区  · 14 年前

    我需要检测NSArray对象中的更改—也就是说,如果某个对象被添加到NSArray或从NSArray中删除,或者刚刚被编辑到位。是否有一些集成的NSArray哈希函数用于此任务-或者我需要为NSArray编写自己的哈希函数?也许有人有不同的解决办法?有什么想法吗?

    2 回复  |  直到 10 年前
        1
  •  3
  •   Community Egal    7 年前

    你可以用一个 NSArrayController ,即 Key-Value-Observing 顺从。不幸的是 NSArray arrangedObjects

    另外,请看这个问题: Key-Value-Observing a to-many relationship in Cocoa

        2
  •  6
  •   Abhi Beckert    11 年前

    所有对象都有一个 -hash 方法,但并非所有对象都有良好的实现。

    NSLog(@"%lu", @[@"foo"].hash);              // output: 1
    NSLog(@"%lu", @[@"foo", @"bar"].hash);      // output: 2
    NSLog(@"%lu", @[@"hello", @"world"].hash);  // output: 2
    

    如果性能不重要,并且数组包含 <NSCoding> NSData 这有一个很好的 -散列 实施:

    [NSArchiver archivedDataWithRootObject:@[@"foo"]].hash             // 194519622
    [NSArchiver archivedDataWithRootObject:@[@"foo", @"bar"]].hash     // 123459814
    [NSArchiver archivedDataWithRootObject:@[@"hello", @"world"]].hash // 215474591
    

    为了获得更好的性能,应该有一个答案解释如何写自己的 -散列 方法。基本上是打电话 -散列 在数组中的每个对象上(假设数组包含可以可靠散列的对象),并使用一些简单的随机数学将每个对象混合在一起。