美文网首页iOS进阶iOS面试题
如何声明私有变量和私有方法(阅读iOS面试题记录)

如何声明私有变量和私有方法(阅读iOS面试题记录)

作者: Sean_Shi | 来源:发表于2016-06-13 11:49 被阅读501次
  1. [obj protected] 这样就是私有的成员变量:
  @interfaceHYBTestModel: NSObject {
     @private NSString *_userName;
   }
   @end
  1. 没有关键字声明为私有方法,因为ObjC中也没有真正意义上的私有方法。我们要让方法成员私有,只能通过放在.m文件中定义而不暴露在外部。但是,如果有人知道内部此这么一个方法,那么也是可以访问的。

先说明:ObjC中没有绝对的私有变量和私有方法。

如何修改私有成员变量的值?

HYBTestModel *model = [[HYBTestModel alloc]init];

// 通过KVC可以轻松修改私有成员变量// 自己加一个打印就可以看到有值了!

[modelsetValue:@"修改私有变量的值"forKey:@"_userName"];

那又如何访问私有成员变量?

Ivar userNameIvar = class_getInstanceVariable([modelclass], "_userName");
NSString *userName = object_getIvar(model, userNameIvar);

我们可以通过runtime来获取对象的成员变量Ivar,然后再通过object_getIvar来获取某个对象的成员变量的值。

相关文章

  • 如何声明私有变量和私有方法(阅读iOS面试题记录)

    [obj protected] 这样就是私有的成员变量: 没有关键字声明为私有方法,因为ObjC中也没有真正...

  • 关于 OC基础语法(初级)

    整理一些笔试面试题,基础的。 1 OC中是否私有方法和私有成员变量? 先表明下观点:没有绝对的私有变量和方法。如果...

  • 设计模式之单例模式

    varmySingleton =function() { /* 这里声明私有变量和方法 */ varprivate...

  • iOS 利用runTime进行“私有方法”替换

    写在前面 首先声明:题目中所说的“私有方法”只是我们感官上的感觉,OC 中没有绝对的私有变量和私有方法。 关于私有...

  • 作用域链

    -如何区分私有变量和全局变量: 1.在全局作用域下声明(预解释的时候)的变量是全局变量2.在私有作用域中声明的变量...

  • iOS之扩展和代理

    扩展 Q:我们一般用扩展做什么? A:声明私有属性,声明私有方法(没什么意义),声明私有成员变量 Q:扩展的特点 ...

  • 扩展 - 代理 - 通知

    扩展 一般扩展做什么?? 1、声明私有属性2、声明私有方法3、声明私有成员变量 扩展特点 编译时决议只以声明的形式...

  • 类扩展(Extension)

    一般用类拓展做什么? 声明私有属性 声明私有方法 声明私有实例变量 类扩展特点 编译时决议 只以声明的形式存在,多...

  • JavaScript函数_07 私有变量 + 私有函数 + 特权

    私有变量 使用 var 关键字声明在函数内部的变量称为私有变量 私有函数 在函数内部声明的函数称为私有函数 特权方...

  • Extension和Category的区别

    一般Extension都放在宿主类的.m文件中,用来声明一些私有成员变量、私有属性、私有方法 Extension和...

网友评论

    本文标题:如何声明私有变量和私有方法(阅读iOS面试题记录)

    本文链接:https://www.haomeiwen.com/subject/zjjydttx.html