黑马程序员技术交流社区

标题: Objective-c有私有方法吗?私有变量呢? [打印本页]

作者: 你不勇敢,    时间: 2015-1-2 21:29
标题: Objective-c有私有方法吗?私有变量呢?
大神们这道题是什么意思呢 MJ视频里没有详细的解说

作者: BBD2008    时间: 2015-1-2 22:26
@protected 的成员变量算吗?
作者: 从今以后    时间: 2015-1-3 01:27
@private 可以定义私有变量。貌似没有严格定义上的私有方法,只是通过对外隐藏让使用者不知道此方法存在,开启ARC后试图调用不再是警告而是编译报错,算是达到私有的效果了。
作者: 业严    时间: 2015-1-22 16:33
BBD2008 发表于 2015-1-2 22:26
@protected 的成员变量算吗?

我也碰到这道题了,私有变量是有,私有方法没有吧。。。
作者: 秦卷卷    时间: 2015-4-17 13:17
我也遇到。。。
作者: GO_monster    时间: 2015-4-17 23:05
我也遇到。。。
作者: zhangshuai    时间: 2015-6-4 16:06
从今以后 发表于 2015-1-3 01:27
@private 可以定义私有变量。貌似没有严格定义上的私有方法,只是通过对外隐藏让使用者不知道此方法存在, ...

能举个例子吗

作者: 从今以后    时间: 2015-6-12 02:24
zhangshuai 发表于 2015-6-4 16:06
能举个例子吗

{:3_50:}好大一个坟...
比如,把方法声明在实现文件中,不在头文件中公开声明,这样在 ARC 下调用会直接报错而不仅仅只是一个警告.
但是如果知道方法名,甚至参数类型,可以通过 performSelector 系列方法或者用 NSInvocation 调用,丧心病狂地还可以用 objc_msgSend 函数甚至直接拿到方法对应的 IMP 也就是函数指针像 C 函数那样直接调用.

另外,私有变量也很难做到真正私有.在知道变量名的情况下,可以使用 KVC 的 setValue:ForKey:, valueForKey:之类的方法访问.

基本上声明私有就得了,非要丧心病狂去访问也是没辙,Objective-C是非常动态的语言.

作者: 庞佳星    时间: 2015-8-19 19:48
看不懂啊啊啊啊啊啊啊!!!
作者: 钱伟    时间: 2015-9-20 20:59
从今以后 发表于 2015-6-12 02:24
好大一个坟...
比如,把方法声明在实现文件中,不在头文件中公开声明,这样在 ARC 下调用会直接报错 ...

大神级人物啊  膜拜一下下
作者: sunguangyu12138    时间: 2016-5-13 10:15
@interface StaticData : NSObject  {      NSDictionary * dict;//私有变量  }
作者: 米阳    时间: 2016-6-20 12:32
objective c中既有私有方法,也有私有变量。
         先说私有方法,
         由于Objective-C的动态消息传递机制,OC中不存在真正意义上的私有方法。
         但是如果你不在.h文件中声明,只在.m文件中实现,或在.m文件的Class Extension里声明,那么基本上和私有方法差不多。
         
         至于私有变量是可以通过@private来声明的,例如:
          @interface Sample : NSObject
             {
              @private
              NSString *tteesstt;
             }
             @property (nonatomic,strong) NSString *hoge;
             - (void)foo;
          @end
         
         则tteesstt变量是私有的。而属性hoge是默认公有。
         
         现在Apple官方文档里是用property比较多,直接定义instance variable少。将property定义到.m的Class Extension也基本上和私有变量差不多。
         
         简而言之,将你希望公有的放到.h文件,私有的放到.m文件。在import时只import .h文件(.m文件也是可以import的,但是我们一般不这么做)。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2