美文网首页
OC中有私有变量和私有方法的相关讨论

OC中有私有变量和私有方法的相关讨论

作者: Jessica124 | 来源:发表于2017-02-28 10:29 被阅读253次

或者这个问题对于老手来说,来来回回啃了好多次,再拿出来谈,貌似就是鸡肋了(食之无味弃之可惜)。可是对于新手来说,还是有点纠结这个问题到底要怎么去理解,你说它有吧,它明明就各种被调用,说它没有吧,又有@private 什么鬼的修饰,明明就限定为私有的啊 。。。 那好,我们来分清楚思路慢慢谈谈:

先说方法:
首先,OC是一门动态定型(dynamicaly typed)语言,它是动态传递消息机制,所有的方法都是函数调用(有时甚至连系统调用(syscalls)也是如此),在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。
本身的机制特点让它并不存在真正意义上的私有。因为在类中创建了该方法之后,在别的类中只要import这个类,实际上就会导入h文件和m文件,所以你不论是写在h文件还是m文件,都是可以强制调用到的。
只是你把方法写在m文件中不在h文件声明,这样的情况在arc环境中,编译器会爆黄提醒你,但是还是会编译通过。
因为OC在编译阶段可以调用任何函数,甚至是这个函数并未实现,(在真正运行的时候才会通过函数的名去对应的函数来调用它),更何况你这个方法在别的类中已经实现过了。
只是写在m文件中,它并不提醒你有这个方法(想调用它的前提是你知道这个隐藏的方法名和参数,然后通过 performSelector 系列方法或者用 NSInvocation 调用,或者用 objc_msgSend 函数(传递消息机制)或者直接拿到方法对应的 IMP类似函数指针,然后像 C 函数那样直接调用)。

再说变量:
@private 定义私有变量,一般来说,设置这样的变量就是私有变量了,可是也不纯粹,因为私有变量只有声明此变量的类本身才能调用。
但是呢,学过OC语法的都知道KVC(key-value-coding),它提供一种机制来间接访问对象的属性,它的存在就打破了类的封装性,强制性访问类的属性。
(不过前提还是得知道你这个属性名),像上面的,如果你把属性写到m文件的Class Extension也和私有变量一样只能通过kvc的方式去修改。

总结一下:
不论是方法还是属性,就算它是私有的,如果你想强制性的去调用的话,死抠方法还是能给你修改到属性或者调用到方法的。不过,从理论层面上来讲,方法不存在私有,而变量存在私有。
还有一种普遍的说法是:OC里面只有类方法和实例方法两种,所有的实例变量默认都是私有的,所有实例方法默认都是共有的。

原文地址:

http://blog.csdn.net/csdn_hhg/article/details/50060089

相关文章

  • OC中有私有变量和私有方法的相关讨论

    或者这个问题对于老手来说,来来回回啃了好多次,再拿出来谈,貌似就是鸡肋了(食之无味弃之可惜)。可是对于新手来说,还...

  • 私有变量和私有方法的访问

    OC中没有绝对的私有变量和私有方法对于私有变量,例如在.h文件中使用@private修饰的变量;在.m文件中扩展中...

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

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

  • 1.1 OC中的私有方法

    本小节知识点: 【掌握】OC中的私有变量 【掌握】OC中的私有方法 1.OC中的私有变量 在类的实现即.m文件中也...

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

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

  • objective-c访问私有变量

    oc没有真正的私有变量,私有方法。通过骗过编译器,我们可以获取我们想要的变量或方法,本文主要记录oc继承中,如何访...

  • 精通掌握封装,多态,继承。

    精通掌握封装,多态,继承。①对于封装:OC没有私有方法但有一定意义上的私有变量,自己类的私有方法可 ...

  • iOS-面试题2

    1、OC 能实现私有化吗?答:方法的私有化,声明即外漏,不声明不外漏。( .m 可以实现私有化。)2、OC 中有...

  • 2018-06-28 python 类的私有变量和私有方法

    转发python 类的私有变量和私有方法 类的私有变量和私有方法在Python中可以通过在属性变量名前加上双下划线...

  • Swift 项目基本写法收集

    泛型用法 GCD相关 懒加载 lazyloading get set 方法 私有方法,私有属性,变量之类的得用fi...

网友评论

      本文标题:OC中有私有变量和私有方法的相关讨论

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