例如,为什么 NSObject class 可以委托给 UIImagePickerController?

why can NSObject class be delegate to UIImagePickerController for instance?

我需要解释为什么 NSObject Class 是任何控制器的委托,尽管 NSObject 不是控制器!?

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

成为代表仅意味着您同意响应一组方法。不管你是什么类型的对象,只要你了解delegate协议中的方法,你就可以成为delegate

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

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

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

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

class 成为特定 class 的代表的唯一要求是实施所需的协议。它不依赖于它的继承链。它可以是 uiviewcontroller、uitableviewcontroller 或只是 NSObject。

如果您的 class 确认符合要求的协议,那么它是成为代表的公平候选人。