首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏iOS面试技术问题

    iOS进阶_KVC(&KVC赋值取值过程分析&KVC自定义&异常处理)

    isEqualToString:[NSString stringWithFormat:@"_%@",key]]) { return object_getIvar(self, ivars isEqualToString:[NSString stringWithFormat:@"%@",key]]) { return object_getIvar(self, ivars [i]); } } free(ivars); return nil; } - (void)wt_setValue:(nullable id)value forKey [i], value); free(ivars); return; } } for (int i = 0; i < count [i], value); free(ivars); return; } } for (int i = 0; i < count

    1.1K41发布于 2020-09-18
  • 来自专栏進无尽的文章

    RunTime 之其他实践运用

    归档调用方法 - (void)encodeWithCoder:(NSCoder *)aCoder { // 获取所有成员变量 unsigned int outCount = 0; Ivar *ivars class_copyIvarList([self class], &outCount); for (int i = 0; i < outCount; i++) { Ivar ivar = ivars forKey:key]; // 这两步就相当于以前的 self.age = [aDecoder decodeObjectForKey:@"_age"]; } free(ivars value = [aDecoder decodeObjectForKey:key]; [self setValue:value forKey:key]; } free(ivars = [NSObject class]) { unsigned int outCount = 0; Ivar *ivars = class_copyIvarList([self

    1.3K30发布于 2018-09-12
  • 来自专栏滕先生的博客

    OC最实用的runtime总结,面试、工作你看我就足够了!前言什么是runtime?如何应用运行时?

    , &outCount); // 遍历所有成员变量 for (int i = 0; i < outCount; i++) { // 取出i位置对应的成员变量 Ivar ivar = ivars free(ivars); 案例2:利用runtime 获取所有属性来重写归档解档方法 // 设置不需要归解档的属性 - (NSArray *)ignoredNames { return @[@" // 这两步就相当于以前的 self.age = [aDecoder decodeObjectForKey:@"_age"]; } free(ivars (void)encodeWithCoder:(NSCoder *)aCoder { // 获取所有成员变量 unsigned int outCount = 0; Ivar *ivars ([self class], &outCount); for (int i = 0; i < outCount; i++) { Ivar ivar = ivars

    1.7K120发布于 2018-05-18
  • 来自专栏日常技术分享

    ios 如何访问私有变量

    ,所以我们可以利用RunTime获取所有属性 - (void)getIvars { unsigned int count = 0; // 拷贝出所胡的成员变量列表 Ivar *ivars self class], &count); for (int i = 0; i<count; i++) { // 取出成员变量 Ivar ivar = ivars ivar_getTypeEncoding(ivar)); NSLog(@"---------------------------------------"); } // 释放 free(ivars ); } 假如我们要访问privateName属性,代码如下 unsigned int count = 0; Ivar *ivars = class_copyIvarList([TestObject class], &count); //对私有变量的更改 Ivar privateNameIvar = ivars[2]; object_setIvar(obj, privateNameIvar

    3.5K31发布于 2018-09-13
  • 来自专栏LinXunFeng的专栏

    iOS - 通过runtime获取某个类中所有的变量和方法

    获取所有的成员变量 unsigned int count = 0; // 拷贝出所胡的成员变量列表 Ivar *ivars = class_copyIvarList([UITextField class], &count); for (int i = 0; i<count; i++) { // 取出成员变量 Ivar ivar = *(ivars + i); ivar)); // 打印成员变量的数据类型 LXFLog(@"%s", ivar_getTypeEncoding(ivar)); } // 释放 free(ivars ); Swift的写法如下 var count: UInt32 = 0 let ivars = class_copyIvarList(UIViewController.self, &count)! <count { let namePoint = ivar_getName(ivars[Int(i)])!

    1.2K20发布于 2018-06-29
  • 来自专栏技术总结

    iOS进阶之runtime作用

    DWExchangeTwoMethod class], &outCount); for (int i = 0; i < outCount; i++) { Ivar ivar = ivars = [NSObject class]) { unsigned int outCount = 0; Ivar *ivars = class_copyIvarList(c, &outCount); for (int i = 0; i < outCount; i++) { Ivar ivar = ivars[i]; = [NSObject class]) { unsigned int outCount = 0; Ivar *ivars = class_copyIvarList(c, &outCount); for (int i = 0; i < outCount; i++) { Ivar ivar = ivars[i];

    84090发布于 2018-05-22
  • 来自专栏java架构1+1

    OC史上最实用的runtime总结,面试、工作你看我就足够了

    free(ivars); 案例2:利用runtime 获取所有属性来重写归档解档方法 // 设置不需要归解档的属性 - (NSArray *)ignoredNames { return @[@"_aaa = [NSObject class]) { unsigned int outCount = 0; Ivar *ivars = class_copyIvarList(c, &outCount); = [NSObject class]) { unsigned int outCount = 0; Ivar *ivars = class_copyIvarList([self class], & = [NSObject class]) { unsigned int outCount = 0; Ivar *ivars = class_copyIvarList(c, &outCount); = [NSObject class]) { unsigned int outCount = 0; Ivar *ivars = class_copyIvarList(c, &outCount);

    1.9K20发布于 2019-06-17
  • 来自专栏DannyHoo的专栏

    利用runtime进行归档解档

    implementation Person - (void)encodeWithCoder:(NSCoder *)aCoder{ //属性的个数 unsigned int count = 0; Ivar * ivars class_copyIvarList([Person class], &count); for (int i = 0; i < count; i++) { //取出对应的Ivar Ivar ivar = ivars NSCoder *)aDecoder{ self = [super init]; if (self) { //属性的个数 unsigned int count = 0; Ivar * ivars class_copyIvarList([Person class], &count); for (int i = 0; i < count; i++) { //取出对应的Ivar Ivar ivar = ivars

    54120发布于 2018-09-13
  • 来自专栏HelloCode开发者学习平台

    class_ro_t 的探索

    对视频中讲到的几个点做验证: 1.class_ro_t 存储着 Flags,Size,Name,Methods,Protocols,Ivars,Properties。 class_ro_t 中有 Flags,Size,Name,Methods,Protocols,Ivars,Properties 的成员变量,但是 baseProtocols 为nil,我们向 SHPreson 二、class_ro_t 的 ivars 我们先来看一下class_ro_t 的 ivars 中都有什么: 确实有 SHPerson 中的四个成员变量,那如果我们在分类中添加属性或者成员变量,class_ro_t 的 ivars 和 baseProperties 是否也会存储呢?

    56210编辑于 2022-01-14
  • 来自专栏赵康的日常专栏

    【iOS】The differences between Class Extension and Header File 类扩展与头文件的区别

    So this can be used to emulate restricted access for your ivars and methods. categories primarily because extensions may declare storage (e.g. properties which will produce backing ivars

    22530编辑于 2023-10-17
  • 来自专栏Alice

    ios_UITextField-修改占位文字和光标的颜色,大小

    [self getIvars]; } // 获取私有变量名称 + (void)getIvars { unsigned int count = 0; Ivar *ivars class_copyIvarList([UITextField class], &count); for (int i = 0; i < count; i++) { Ivar ivar = ivars [self getIvars]; } // 获取私有变量名称 + (void)getIvars { unsigned int count = 0; Ivar *ivars class_copyIvarList([UITextField class], &count); for (int i = 0; i < count; i++) { Ivar ivar = ivars

    1.5K10发布于 2018-12-26
  • 来自专栏韦弦的偶尔分享

    [译] Objective-C init:为什么避免向 self 发消息会有帮助?

    implementation: - (void)dealloc { [_count release]; [super dealloc]; } Objective-C init/dealloc:拯救 ivars 在 init 中,所有 ivars 都已建立。在 dealloc 中,没有一个 ivars 被销毁。 但您仍需谨慎行事,并认识到自己在对象生命周期中的位置。仅仅创建一个对象并不能开始任何繁重的工作。

    29210编辑于 2024-02-29
  • 来自专栏哈雷彗星撞地球

    YYModel V1.0.4源码解析

    info.name] = info; } free(properties); } unsigned int ivarCount = 0; Ivar *ivars 0; i < ivarCount; i++) { YYClassIvarInfo *info = [[YYClassIvarInfo alloc] initWithIvar:ivars [i]]; if (info.name) ivarInfos[info.name] = info; } free(ivars); } YYModel 对示例变量做了一层封装,封装成了YYClassIvarInfo YYClassIvarInfo *info = [[YYClassIvarInfo alloc] initWithIvar:ivars [i]]; if (info.name) ivarInfos[info.name] = info; } free(ivars); }

    86740发布于 2018-08-22
  • 来自专栏网罗开发

    iOS 进阶之 Class 的底层原理

    instance_size OBJC2_UNAVAILABLE; struct objc_ivar_list * _Nullable ivars name; method_list_t * baseMethodList; protocol_list_t * baseProtocols; const ivar_list_t * ivars baseMethodList,baseProtocols,ivars,baseProperties三个都是一位数组。 总结 ogjc_class的整体内部结构如下: ?

    1.4K10发布于 2021-01-29
  • 来自专栏攻城狮的动态

    「类与对象」揭秘本质的第一步

    appDelegateClassName);} main.cpp相关代码: truct AppDelegate_IMPL { struct UIResponder_IMPL UIResponder_IVARS appDelegateClassName);} 2、clang编译后: struct AppDelegate_IMPL { struct UIResponder_IMPL UIResponder_IVARS NSObject <NSObject> {#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wobjc-interface-ivars

    61310发布于 2019-11-25
  • 来自专栏HelloCode开发者学习平台

    iOS 底层原理探索 之 KVC 我愿称之它为魔法...

    class] accessInstanceVariablesDirectly]) { unsigned int outCount = 0; ///获取实例变量列表 Ivar *ivars NSMutableArray arrayWithCapacity:2]; for (int i = 0; i < outCount; i++) { Ivar ivar = ivars stringWithCString:pName encoding:NSUTF8StringEncoding]; [is addObject:name]; } free(ivars accessInstanceVariablesDirectly]) { unsigned int outCount = 0; ///获取实例变量列表 Ivar *ivars NSMutableArray alloc] init]; for (int i = 0; i < outCount; i++) { Ivar ivar = ivars

    69721发布于 2021-08-25
  • 来自专栏Jacklin攻城狮

    「类与对象」揭秘本质的第一步

    appDelegateClassName); } main.cpp相关代码: struct AppDelegate_IMPL { struct UIResponder_IMPL UIResponder_IVARS appDelegateClassName); } 2、clang编译后: struct AppDelegate_IMPL { struct UIResponder_IMPL UIResponder_IVARS NSObject <NSObject> { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wobjc-interface-ivars

    63110发布于 2019-12-26
  • 来自专栏码客

    iOS 引导页实现方式

    修改原来的点为自己的图片 func runtime() { // 利用runtime 遍历出pageControl的所有属性 var count : UInt32 = 0 let ivars <count { let ivar = ivars?[Int(i)] let name = ivar_getName(ivar!)

    1.7K10发布于 2019-10-22
  • 来自专栏Objective-C

    OC 对象的本质

    NSObject <NSObject> { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wobjc-interface-ivars main-arm64.cpp 我们可以发现在生成的C++文件内,Student类的实现是如下格式 struct Student_IMPL { struct NSObject_IMPL NSObject_IVARS ; int _no; int _age; }; 这其中包含的struct NSObject_IMPL NSObject_IVARS;是指NSObject的实现,由于NSObject的实现里面只有一个 注意 : 不是12个字节 Student对象的实现 struct Student_IMPL { struct Person_IMPL Person_IVARS; int _no; };

    1.4K91发布于 2018-05-10
  • 来自专栏HelloCode开发者学习平台

    iOS底层学习——KVC下篇

    NSMutableArray *mArray = [NSMutableArray arrayWithCapacity:1]; unsigned int count = 0; Ivar *ivars = class_copyIvarList([self class], &count); for (int i = 0; i<count; i++) { Ivar ivar = ivars ivarNameChar]; NSLog(@"ivarName == %@",ivarName); [mArray addObject:ivarName]; } free(ivars

    63430发布于 2021-08-25
领券