Objective c 目标-C“;“私人”;协议?
我得到了一个视图控制器类(MyViewController),它处理UIView子类(MyView)。我不想让视图控制器类以外的任何类知道UIView子类,因此我无法在Objective c 目标-C“;“私人”;协议?,objective-c,cocoa,protocols,Objective C,Cocoa,Protocols,我得到了一个视图控制器类(MyViewController),它处理UIView子类(MyView)。我不想让视图控制器类以外的任何类知道UIView子类,因此我无法在MyViewController.h中导入MyView.h 因此,在MyViewController.m中,我将 #import "MyViewController.h" #import "MyView.h" @interface MyViewController (PrivateObjects) MyView *myView
MyViewController.h
中导入MyView.h
因此,在MyViewController.m
中,我将
#import "MyViewController.h"
#import "MyView.h"
@interface MyViewController (PrivateObjects)
MyView *myView;
@end
...
然而,为了从MyView获得反馈,我使用了一个委托。该代理必须实现MyViewDelegate
协议
如何在MyViewController
内部实现MyViewDelegate
协议,而不必在MyViewController.h
中导入MyView.h
?在MyView.h之外创建一个协议(.h),并在MyViewController的声明(.h)中使用该协议,例如:
#import "MyViewDelegate.h"
@interface MyViewController : UIViewController <MyViewDelegate>
#导入“MyViewDelegate.h”
@接口MyViewController:UIViewController
--Frank您可以在MyViewController.h中使用forware声明
@class MyView;
@interface MyViewController {
MyView *myView;
}
@end
你为什么要使用协议?只需将这些方法放在PrivateObjects类别中
编辑:苹果公司将这种技术称为“我知道这听起来很奇怪,但根据经验,我可以告诉你不要太在意可可豆中的隐私层次结构 因此,在应用程序或内部框架中,只需记录类,说明它应该如何使用 这是因为只要C指针在附近,你就不可能有真正的隐私,所以Objective-C的设计没有语法,只会给你一些错觉 例如,视图控制器的IB outlet变量通常只能由控制器本身访问,但它们始终是公共的,因为它们必须可以从取消归档和实例化nib文件并将outlet与相应实例链接的类中访问 [包括下面bbum的建议]
@interface MyViewController(PrivateObjects)
@interface MyViewController (PrivateObjects) <MyViewDelegate>
....
....
(顺便说一句,你不能在一个类别中声明一个新的ivar。)如果委托包含一个方法
-(void)myView:(myView*)myView textDidChange:(NSString*)text
,那该怎么办?这并不是说该语言在支持私有实现方面不够,非常重要的是,该语言的设计目的是不浪费语法来创造隐私的假象,这是基于C语言的所有功能。因为“只是将方法放在那里”是一种糟糕的编程风格,加上MyView
应该是可重用的,因此委托在这里绝对有用。啊哈,看起来我误解了“我不想让视图控制器类以外的任何类知道UIView子类”