Accessor Search Implementation Details
[Accessor Search Implementation Details]
Key-value coding attempts to use accessor methods to get and set values, before resorting to directly accessing the instance variable.
Key-value coding 优先使用accessor methods走获取与设置数据,之后再使直接访问instance variable.
[Accessor Search Patterns for Simple Attributes]
Default Search Pattern for setValue:forKey:
When the default implementation of setValue:forKey:
is invoked for a property the following search pattern is used:
The receiver’s class is searched for an accessor method whose name matches the pattern
set<Key>:
.If no accessor is found, and the receiver’s class method
accessInstanceVariablesDirectly
returnsYES
, the receiver is searched for an instance variable whose name matches the pattern_<key>
,_is<Key>
,<key>
, oris<Key>
, in that order.If a matching accessor or instance variable is located, it is used to set the value.
If no appropriate accessor or instance variable is found,
setValue:forUndefinedKey:
is invoked for the receiver.
Default Search Pattern for valueForKey:
When the default implementation of valueForKey:
is invoked on a receiver, the following search pattern is used:
Searches the class of the receiver for an accessor method whose name matches the pattern
get<Key>
,<key>
, oris<Key>
, in that order. If such a method is found it is invoked.Otherwise (no simple accessor method is found), searches the class of the receiver for methods whose names match the patterns
countOf<Key>
andobjectIn<Key>AtIndex:
(corresponding to the primitive methods defined by theNSArray
class) and<key>AtIndexes:
(corresponding to theNSArray
methodobjectsAtIndexes:
).If the
countOf<Key>
method and at least one of the other two possible methods are found, a collection proxy object that responds to allNSArray
methods is returned. EachNSArray
message sent to the collection proxy object will result in some combination ofcountOf<Key>
,objectIn<Key>AtIndex:
, and<key>AtIndexes:
messages being sent to the original receiver ofvalueForKey:
. If the class of the receiver also implements an optional method whose name matches the patternget<Key>:range:
that method will be used when appropriate for best performance.Otherwise (no simple accessor method or set of array access methods is found), searches the class of the receiver for a threesome of methods whose names match the patterns
countOf<Key>
,enumeratorOf<Key>
, andmemberOf<Key>:
(corresponding to the primitive methods defined by theNSSet
class).If all three methods are found, a collection proxy object that responds to all
NSSet
methods is returned. EachNSSet
message sent to the collection proxy object will result in some combination ofcountOf<Key>
,enumeratorOf<Key>
, andmemberOf<Key>:
messages being sent to the original receiver ofvalueForKey:
.Otherwise (no simple accessor method or set of collection access methods is found), if the receiver's class method
accessInstanceVariablesDirectly
returnsYES
, the class of the receiver is searched for an instance variable whose name matches the pattern_<key>
,_is<Key>
,<key>
, oris<Key>
, in that order. If such an instance variable is found, the value of the instance variable in the receiver is returned. If the type of the result is one of the scalar types supported byNSNumber
conversion is done and anNSNumber
is returned. Otherwise, conversion is done and anNSValue
is returned. Results of arbitrary types are converted toNSValue
objects, not justNSPoint
,NSRange
,NSRect
, andNSSize
types.If none of the above situations occurs, returns a result the default implementation invokes
valueForUndefinedKey:
.
Accessor Search Implementation Details的更多相关文章
- 17.2.1 Replication Implementation Details 复制实现细节:
17.2 Replication Implementation 复制是基于master server 跟踪所有改变到他的数据库(更新,删除等等)在它的binary log. binary log 作为 ...
- [Angular] Extract Implementation Details of ngrx from an Angular Application with the Facade Pattern
Extracting away the implementation details of ngrx from your components using the facade pattern cre ...
- The implementation details of the built thermal setup
Lucid infrared thermography of thermally-constrained processors
- iOS修改声明为readonly的属性值
本文讨论的是,对于类中声明为 readonly 的属性值,我们就不可以修改其值了么?如何可以,那么如何修改呢? 为了便于说明,定义一个 ACLStudent 的类: ACLStudent.h @int ...
- 论文笔记:Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation
Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation2019-03-18 14:4 ...
- (转)The Evolved Transformer - Enhancing Transformer with Neural Architecture Search
The Evolved Transformer - Enhancing Transformer with Neural Architecture Search 2019-03-26 19:14:33 ...
- Foundation: Binary Search
/* Binary search. * * Implementation history: * 2013-10-5, Mars Fu, first version. */ /* [Binary Sea ...
- 17.2?Replication Implementation 复制实施:
17.2?Replication Implementation 复制实施: 17.2.1 Replication Implementation Details 17.2.2 Replication R ...
- [转]An overview of Openvswitch implementation
This is NOT a tutorial on how to use openvswitch, this is for developers who want to know the implem ...
随机推荐
- java连接mysql的一个小例子
想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...
- C#分页类
using System.Linq; using System.Collections.Generic; namespace CommonLibrary { public class PagedLis ...
- HTML5_拖放
拖放(Drag 和 drop)是 HTML5 标准的组成部分.拖放是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 支持的浏览器:Inter ...
- 用FireMonkey写QQ皮肤
这是运行在Windows平台的效果,同样不需要改一行代码就可以运行在Mac Os,并且效果完全相同: 用FireMonkey做界面速度非常快,其提供的Effect ,Filter,Animation等 ...
- spring mvc出现 Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'endtime'
在使用spring mvc中,绑定页面传递时间字符串数据给Date类型是出错: Failed to convert property value of type [java.lang.String] ...
- poj 1195 mobile phone
题目连接: 题意:要求设计这样一个数据结构,支持下列操作 1.add(x,y,a).对二维数组的第x行,第y列加上a. 2.sum(l,b,r,t).求所有满足l<=x<=r,b<= ...
- MapView的用法
一.MapView 1.显示用户的位置点(用蓝色圆点标记) mapView.showsUserLocation = YES; 2.代理方法 1> 当定位到用户的位置就会调用 - (void)ma ...
- mysql二
日期 MONTHNAME(birth) 月份的英文 模式匹配 变量 统计
- [转] gc tips(3)
原文地址:http://kevincao.com/2011/08/actionscript-garbage-collection-2/ 谈谈ActionScript垃圾回收(下) 前文我们介绍了GC的 ...
- Java多线程-工具篇-BlockingQueue
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列 类,为我们快速搭建高质量的多线程程序带来极大的 ...