仅仅遵守Objective-C协议有什么作用吗?
定义一个协议,类似于这样: i、 例如,我不想合成仅仅遵守Objective-C协议有什么作用吗?,objective-c,uikit,protocols,Objective C,Uikit,Protocols,定义一个协议,类似于这样: i、 例如,我不想合成fetchedResultsController属性或实现任何NSFetchedResultsControllerDelegate方法,我还应该遵守CPCoreDataTraits协议吗 @interface MyViewController : UIViewController <CPCoreDataTraits> @end @interface MyViewController : UIViewController @prope
fetchedResultsController
属性或实现任何NSFetchedResultsControllerDelegate
方法,我还应该遵守CPCoreDataTraits
协议吗
@interface MyViewController : UIViewController <CPCoreDataTraits>
@end
@interface MyViewController : UIViewController
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@end
正如您在协议声明中所看到的,您的类对这两个属性的实现是可选的,因为这两个属性是在@optional语句下声明的。 这意味着将使用符合本协议的任何对象的任何其他类,在使用可选方法或属性之前必须检查其有效实现 在本例中,任何想要访问fetchedResultsController属性的类都必须检查getter和/或setter方法是否存在,例如,使用:
[myController respondsToSelector:@selector(fetchedResultsController)];
[myController respondsToSelector:@selector(setFetchedResultsController:)];
[myController respondsToSelector:@selector(fetchedResultsController)];
[myController响应选择器:@selector(setFetchedResultsController:)];
如果调用方法不执行此初步检查,并且您的协议实现不支持任何这些方法(因为可选),则应用程序将引发异常。
因此,您的方法是正确的,这两个示例中唯一的区别是,如果您不使用表示法,则对对象的conformsToProtocol:的任何调用都将返回NO.,正如您在协议声明中所看到的,类对这两个属性的实现是可选的,因为这两个属性是在@optional语句下声明的。
这意味着将使用符合本协议的任何对象的任何其他类,在使用可选方法或属性之前必须检查其有效实现
在本例中,任何想要访问fetchedResultsController属性的类都必须检查getter和/或setter方法是否存在,例如,使用:
[myController respondsToSelector:@selector(fetchedResultsController)];
[myController respondsToSelector:@selector(setFetchedResultsController:)];
[myController respondsToSelector:@selector(fetchedResultsController)];
[myController响应选择器:@selector(setFetchedResultsController:)];
如果调用方法不执行此初步检查,并且您的协议实现不支持任何这些方法(因为可选),则应用程序将引发异常。
因此,您的方法是正确的,这两个示例中唯一的区别是,如果您不使用表示法,那么在对象上对conformsToProtocol:的任何调用都将返回NO.当在Xcode中声明/定义委托方法时,它可以自动完成方法!它支持在Xcode中声明/定义委托方法时自动完成方法!
[myController respondsToSelector:@selector(fetchedResultsController)];
[myController respondsToSelector:@selector(setFetchedResultsController:)];