为什么我在定义委托时遇到错误“无法使用手动引用计数合成文件中的弱属性”?

时间:2016-12-08 08:49:21

标签: objective-c class delegates

我在一个文件中有协议和类头:

@protocol SomethingDelegate
- (void) doSomething;
@end

@interface SomethingClass
@property (nonatomic, weak) id <SomethingDelegate> delegate;
@end

在.m文件中:

@implementation SomethingClass // in here I got error "Cannot synthesize weak property in file using manual reference counting"

@end

如果我把它改成这样:

@implementation SomethingClass 

@synthesize delegate; // in here I got error "Cannot synthesize weak property in file using manual reference counting"

@end

为什么会这样?以及如何解决这个问题?如果我从weak更改为strong,则错误消失。但这不是代表应该如何宣布,对吧?如何正确宣布弱代表?

2 个答案:

答案 0 :(得分:18)

您需要在项目Weak References in Manual Retain Release下的YES中将Apple LLVM 8.0 - Language - Objective C设置为Build Settings,如下面的屏幕截图所示 -

enter image description here

答案 1 :(得分:1)

您不必使用合成,因为Xcode 4.4和LLVM 2.0编译器会自动进行合成。 你可以删除该行

 @synthesize delegate; 

如果你想手动进行合成,你可以打开&#34;隐式合成属性&#34;通过将其设置为YES

在构建设置中标记

并且您正在使用手动保留版本,您不能在属性中使用弱/强,您应该使用retain / assign。