A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

大神们这道题是什么意思呢 MJ视频里没有详细的解说

11 个回复

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

我也碰到这道题了,私有变量是有,私有方法没有吧。。。
回复 使用道具 举报
我也遇到。。。
回复 使用道具 举报
我也遇到。。。
回复 使用道具 举报
从今以后 发表于 2015-1-3 01:27
@private 可以定义私有变量。貌似没有严格定义上的私有方法,只是通过对外隐藏让使用者不知道此方法存在, ...

能举个例子吗
回复 使用道具 举报

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

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

基本上声明私有就得了,非要丧心病狂去访问也是没辙,Objective-C是非常动态的语言.
回复 使用道具 举报
看不懂啊啊啊啊啊啊啊!!!
回复 使用道具 举报
从今以后 发表于 2015-6-12 02:24
好大一个坟...
比如,把方法声明在实现文件中,不在头文件中公开声明,这样在 ARC 下调用会直接报错 ...

大神级人物啊  膜拜一下下
回复 使用道具 举报
@interface StaticData : NSObject  {      NSDictionary * dict;//私有变量  }
回复 使用道具 举报
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的,但是我们一般不这么做)。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马