我有一个模型类假存储库,它实现了一个委托方法:
·H
@interface FakeAccountRepository : NSObject <AccountRepositoryDelegate>
@end
的.m
@implementation FakeAccountRepository
-(id)init{
if (self = [super init]) {
// statements
}
return self;
}
这是协议和代理:
@protocol AccountRepositoryDelegate <NSObject>
@optional
- (NSArray *)accountRegistered;
@end
在View Controller中,这是什么意思:
id <AccountRepositoryDelegate> fakeRepository = [[FakeAccountRepository alloc] init];
我的意思是&#34; [[FakeAccountRepository alloc] init]
&#34;正在返回FakeRepository类的对象。那么这个分配发生了什么?
答案 0 :(得分:1)
代码:
[[FakeAccountRepository alloc] init];
显然会创建FakeAccountRepository
类的实例。而且,如您所知,此类恰好符合AccountRepositoryDelegate
协议。
宣言:
id <AccountRepositoryDelegate> fakeRepository
正在创建名为fakeRepository
的变量,其类型为id <AccountRepositoryDelegate>
。 id
表示对任何对象类型的对象引用。 <AccountRepositoryDelegate>
当然引用了AccountRepositoryDelegate
协议。它们一起表示变量可以是任何对象类型,只要该对象符合AccountRepositoryDelegate
协议。
基本上,id<SomeProtocol>
意味着您可以分配符合给定协议的任何对象。
您可以在iOS API中看到大量此类示例。例如,dataSource
的{{1}}和delegate
属性分别定义为UITableView
和id<UITableViewDataSource>
。