文档章节

iOS私有属性的访问与修改

_子墨
 _子墨
发布于 2017/05/03 19:10
字数 205
阅读 43
收藏 0
// Son.m

#import "Son.h"

@interface Son ()
// 将属性放在.m文件中,使之成为私有属性
@property (nonatomic, copy) NSString *name;

@end
// Father.m

#import "Father.h"
#import "Son.h"
#import <objc/runtime.h>

@implementation Father


#pragma mark - KVC 方式访问和修改私有变量

- (void)printSonNameWithKVC
{
    Son *son = [[Son alloc] init];
    
    // 修改前
    NSString *name = [son valueForKey:@"name"];
    NSLog(@"-name:%@", name);
    
    // 修改后
    [son setValue:@"Jabit" forKey:@"name"];
    NSString *nameReset = [son valueForKey:@"name"];
    NSLog(@"-nameReset:%@", nameReset);
}


#pragma mark - Runtime 方式访问和修改私有变量

- (void)printSonNameWithRuntime
{
    Son *son = [[Son alloc] init];
    
    unsigned int count = 0;
    Ivar *members = class_copyIvarList([Son class], &count);
    for (int i = 0; i < count; i++) {
        Ivar ivar = members[i];
        const char *memberName = ivar_getName(ivar);
        const char *memberType = ivar_getTypeEncoding(ivar);
        //依次打印属性名称和属性类型
        NSLog(@"%s : %s", memberName, memberType);
        
        if (strcmp(memberName, "_name") == 0) {
            // 修改前
            NSString *name = (NSString *)object_getIvar(son, members[i]);
            NSLog(@"-name:%@", name);
            
            // 修改后
            object_setIvar(son, members[i], @"Jabit");
            NSString *nameReset = (NSString *)object_getIvar(son, members[i]);
            NSLog(@"-nameReset:%@", nameReset);
            
            break;
        }
    }
}

@end

© 著作权归作者所有

共有 人打赏支持
_子墨
粉丝 47
博文 157
码字总数 141425
作品 0
深圳
iOS工程师
私信 提问
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
苹果私有API检查工具开源项目

iOS-private-api-checker 苹果iOS私有API检查工具 Developer tool to scan iOS apps for private API usage before submitting to Apple https://github.com/hustcc/iOS-private-api-checker......

小薇
2015/11/05
0
0
定制iOS 7中的导航栏和状态栏

由于种种原因,申请了一个开源中国的帐号,也许会由于我的不耐心,不会亲自去一步步的写博文,但准备把自己看到的好的,都转载过来,就当时资源的存储,也算是一种推广吧。 iOS 7 教程:定制...

谁家的阿毛
2013/11/21
0
0
Dhar/YTTInjectedContentKit

YTTInjectedContentKit iOS壳版本场景下的批量修改类名、属性名、插入混淆代码、修改项目名称的shell脚本 具体的实现和使用方法请参考我的博客文章: iOS使用shell脚本注入混淆内容 iOS使用S...

Dhar
2018/05/04
0
0
iOS高仿微信、仪表盘、图片标注图片滤镜、高斯模糊、上拉加载、下拉刷新等源码

iOS精选源码 Swift-图片画框标注(http://www.code4app.com/thread-29884-1-1.html) Swift版的上拉加载, 下拉刷新控件(一句话集成, 超级易用)(http://www.code4app.com/thread-29885-1-1.html...

sunnyaigd
2018/05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

详解webpack-dev-server的简单使用

webpack-dev-server是一个小型的Node.js Express服务器,它使用webpack-dev-middleware来服务于webpack的包,除此自外,它还有一个通过Sock.js来连接到服务器的微型运行时. 我们来看一下下面的...

前端攻城老湿
22分钟前
0
0
深度解析JavaScript事件对象

这篇文章主要介绍了JavaScript事件对象,结合实例形式深入分析了javascript DOM、IE及其他浏览器相关事件对象操作技巧与注意事项,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可...

前端攻城小牛
23分钟前
0
0
Android下拉刷新开源框架

添加依赖 //下拉刷新 implementation 'com.jcodecraeer:xrecyclerview:1.5.9' xml引用 <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/act_xrecycler......

lanyu96
30分钟前
0
0
Linux内核中ioremap映射的透彻理解

几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两...

天王盖地虎626
34分钟前
1
0
Collection中的之retainAll()方法的理解

//在jdkapi中的方法,说明返回值为boolean类型, boolean retainAll(Collection<?> c) ; //api中给的注释 //Retains only the elements in this list that are contained in the specified......

南桥北木
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部