将oc的代码转换成c或者c++代码的命令(比如我转换的main.m文件)
首先切换到main.m所在的文件位置,然后执行这段命令:
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m
如果代码中有__weak
执行这段命令
xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-8.0.0 main.m
- kvc的作用:实现对象属性值的变化,一般来说就是获取或者改变。
- kvc的简单使用:
DGPerson *person = [[DGPerson alloc] init];
// person->_age = 10;
// person ->_isAge = 30;
[person setValue:@10 forKey:@"age"];
-
kvc 付值的整个过程:
1.先会调用setKey:这个方法。
2.如果1没有的话开始调用_setKey:这个方法。
3.如果2的方法也没有开始判断这个方法(+ (BOOL)accessInstanceVariablesDirectly)返回的是yes还是no,如果是yes则继续发现是否有这些成员变量(_key,_isKey,key,isKey)按照顺序执行的,如果都没有报找不到那个key的错误,如果返回的是no,直接报找不到key的错误。
下面用一副图片来展示:
image.png -
kvc获取值的原理:
1.先去找getKey这个方法
2.如果1找不到,找key这个方法
3.如果2找不到,找isKey这个方法
4.如果3找不到,找_key这个方法。
5.如果以上的方法都找不到,先判断这个方法(+ (BOOL)accessInstanceVariablesDirectly)是否是真,如果是真,则继续找这些成员变量,注意按照顺序查找(_key,_isKey,key,isKey)查找,如果都找不到,报方法找不到的错误,如果找到了获得值,如果这个方法(+ (BOOL)accessInstanceVariablesDirectly)为假,那就直接报方法找不到的错误。下面是流程图:
image.png
网友评论