仅仅遵守Objective-C协议有什么作用吗?

仅仅遵守Objective-C协议有什么作用吗?,objective-c,uikit,protocols,Objective C,Uikit,Protocols,定义一个协议,类似于这样: i、 例如,我不想合成fetchedResultsController属性或实现任何NSFetchedResultsControllerDelegate方法,我还应该遵守CPCoreDataTraits协议吗 @interface MyViewController : UIViewController <CPCoreDataTraits> @end @interface MyViewController : UIViewController @prope

定义一个协议,类似于这样:

i、 例如,我不想合成
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:)];