返回一个可以响应NSSet所有方法的代理集合(collection proxy object)。发送给这个代理集合(collection proxy object)的NSSet消息方法,就会以countOf
、enumeratorOf
、memberOf
:组合的形式调用。
4, 还是没查到,那么如果类方法accessInstanceVariablesDirectly返回YES,那么按_
,_is
,
,is
的顺序直接搜索成员名。如果实例变量被找到,那么它的值会被以对象的形式返回(数值类型进行NSNumber的封装,其他的进行NSValue的封装)。
5. 再没查到,调用valueForUndefinedKey:。
?
查找有序集合成员,比如NSMutableArray
mutableArrayValueForKey:搜索方式如下:
1,搜索insertObject:in
AtIndex:、removeObjectFrom
AtIndex:或者insert
:atIndexes、remove
AtIndexes:格式的方法。
如果至少一个insert方法和至少一个remove方法找到,那么同样返回一个可以响应NSMutableArray所有方法的代理集合。那么发送给这个代理集合的NSMutableArray消息方法,以insertObject:in
AtIndex:、removeObjectFrom
AtIndex:、insert
:atIndexes、remove
AtIndexes:组合的形式调用。还有两个可选实现的接口:replaceObjectIn
AtIndex:withObject:、replace
AtIndexes:with
:。
2,否则,搜索set
:格式的方法,如果找到,那么发送给代理集合的NSMutableArray最终都会调用set
:方法。
也就是说,mutableArrayValueForKey取出的代理集合修改后,用set
:重新赋值回去。这样做效率会差很多,所以推荐实现上面的方法。
3,否则,那么如果类方法accessInstanceVariablesDirectly返回YES,那么按_
,
的顺序直接搜索成员名。如果找到,那么发送的NSMutableArray消息方法直接转交给这个成员处理。
4. 再找不到,调用setValue:forUndefinedKey:。
搜索无序集合成员,如:NSSet。
mutableSetValueForKey:搜索方式如下:
1. 搜索add
Object:、remove
Object:或者add
:、remove
:格式的方法,如果至少一个insert方法和至少一个remove方法找到,那么返回一个可以响应NSMutableSet所有方法的代理集合。那么发送给这个代理集合的NSMutableSet消息方法,以add
Object:、remove
Object:、add
:、remove
:组合的形式调用。还有两个可选实现的接口:intersect
、set
:。
2. 如果reciever是ManagedObejct,那么就不会继续搜索了。
3. 否则,搜索set
:格式的方法,如果找到,那么发送给代理集合的NSMutableSet最终都会调用set
:方法。也就是说,mutableSetValueForKey取出的代理集合修改后,用set
:重新赋值回去。这样做效率会差很多,所以推荐实现上面的方法。
4. 否则,那么如果类方法accessInstanceVariablesDirectly返回YES,那么按_
,
的顺序直接搜索成员名。如果找到,那么发送的NSMutableSet消息方法直接转交给这个成员处理。
?
?