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
accessInstanceVariablesDirectlyreturnsYES, 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 theNSArrayclass) and<key>AtIndexes:(corresponding to theNSArraymethodobjectsAtIndexes:).If the
countOf<Key>method and at least one of the other two possible methods are found, a collection proxy object that responds to allNSArraymethods is returned. EachNSArraymessage 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 theNSSetclass).If all three methods are found, a collection proxy object that responds to all
NSSetmethods is returned. EachNSSetmessage 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
accessInstanceVariablesDirectlyreturnsYES, 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 byNSNumberconversion is done and anNSNumberis returned. Otherwise, conversion is done and anNSValueis returned. Results of arbitrary types are converted toNSValueobjects, not justNSPoint,NSRange,NSRect, andNSSizetypes.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 ...
随机推荐
- 纠结和郁闷的存在感-关于DirectX与HLSL的矩阵存储方式---转载好文章
我常常这么大胆的认为,搞科学的人总是喜欢用各种让常人难以理解的复杂方式去处理某些其实可能很简单的事情,这种情况在他自身擅长的.有着诸多对手竞争的领域上极为常见.比如吧,搞DirectX的人用了左手坐标 ...
- KEYUSE
typedef struct keyuse_t { TABLE *table; Item *val; /**< or value if no field */ table_map used_ta ...
- linux 2.6up的设备和设备驱动模型
在linux2.6 的设备和设备驱动模型构架中,所有的外部设备和驱动程序都挂在总线上 ,总线分为(usb -- USB设备,PCI -- PCI 设备 platform -- 直接和处理器进 ...
- android系统掉电保护
/************************************************************************ * android系统掉电保护 * 说明: * An ...
- dede 字符串截取
[field:description function="( strlen(strip_tags('@me',''))>100 ? cn_substr(strip_tags('@me' ...
- 【英语】Bingo口语笔记(52) - sleep系列
- MySQL多表连接
主要分3种:内连接,外连接,交叉连接 其 他:联合连接,自然连接 1.内联接 典型的联接运算,使用像 = 或 <> 之类的比较运算).包括相等联接和自然联接. 内联接使用比 ...
- Aviary 滤镜 教程 照片编辑器
Aviary是一个国外的非常强大的照片编辑器,各种功能,但是是以静态库的形式存在的,不开源,但是很好用. 1.到官网上面下载sdk https://github.com/AviaryInc/Mobil ...
- ios 页面传值4种方式(一) 之全局变量
通用的是用代理的方式实现页面传值,但是有时候利用其它方式也可以很巧妙的解决问题,页面传值一共有4种方式: 1.使用全局变量, SharedApplication,定义一个变量来传递. 2.使用文件,或 ...
- mysql 1130 ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server
mysql -u root -p mysql;use mysql; mysql;select 'host' from user where user='root'; mysql;update u ...