我有一个自定义委托和数据源。但是当我尝试初始化它时,我遇到了一些问题。在我的.h文件中,如果有这样的话。
@property (nonatomic, assign) id<UITableViewDelegate> delegate;
@property (nonatomic, assign) id<KalDataSource> dataSource;
这导致在.m文件中的合成中出现以下错误。
Existing ivar 'dataSource' for property 'dataSource' with assign attribute must be __unsafe_unretained.
经过一些谷歌搜索魔术后,我发现我应该像这样调整我的变量。
@property (nonatomic, strong) id<UITableViewDelegate> delegate;
@property (nonatomic, strong) id<KalDataSource> dataSource;
但后来我收到了这个错误。
linker command failed with exit code 1 (use -v to see invocation)
有人可以帮我吗?
亲切的问候!
答案 0 :(得分:1)
您遇到的错误与您的记忆限定符无关(它们第一次就是正确的)。问题在于你已经在某个地方声明了支持iVar而没有限定符。当声明iVars时,它们是隐式强大的,所以如果你去影视iVars,并且在__weak
或__unsafe_unretained
之前,警告应该消失。当然,更好的解决方案是完全删除你的支持iVars,因为Xcode会为你合成它们。
答案 1 :(得分:0)
代表通常是weak
个引用。
使用委托的对象不拥有它。
它只是对可能或不能响应的对象的引用。
Weak说,如果对象的真正所有者释放它,它应该被释放。
然后弱引用自动设置为nil
,你就不会得到任何僵尸。
其次,问题是,您已经拥有名为dataSource
的属性。
我之前关于重复属性的陈述结果证明是错误的。
你应该覆盖setter&amp; getter,.h
中的声明和.m
文件中的实现。