为什么可以将NSObject类委托给UIImagePickerController例如?

时间:2019-01-13 14:12:02

标签: ios delegates uiimagepickercontroller nsobject

我需要解释一下,尽管NSObject不是控制器,但NSObject类如何成为任何控制器的委托!

4 个答案:

答案 0 :(得分:2)

delegate仅仅是Delegate设计模式的一种实现。在Cocoa类中,它是使用协议来实现的-任何实现特定协议的类都可以是委托。例如,让我们看一下definition of delegate property in UITableView class(在Objective-C中,因为它更好地显示了类和协议之间的区别):

@property(nonatomic, weak) id<UITableViewDelegate> delegate;

在Objective-C中,id是通用指针-指向任何类的对象的指针。您可以看到UITableView希望它是delegate的任何类,但可以实现UITableViewDelegate协议的类

答案 1 :(得分:0)

一个对象可以是一个委托而不是一个控制器。

答案 2 :(得分:0)

成为代表仅表示您同意对一套方法做出回应。不管是哪种对象,只要了解委托协议中的方法,您都可以成为委托。

例如,您有一个中央表视图管理器对象,该对象了解整个UI中的多个表视图。您可以使该表视图管理器成为您应用程序中所有表视图的委托。 (我不知道这是否有意义,但是如果有理由的话,您当然可以这样做。)

答案 3 :(得分:0)

将一个类作为特定类的委托的唯一要求是实现所需的协议。它不依赖于其继承链。可以是uiviewcontroller,uitableviewcontroller或仅仅是NSObject。

如果您的班级确认了所需的协议,那么它很可能会成为委托。