__unsafe_unretained代表不会build立

我有一个.h文件的代码(片段):

#import <UIKit/UIKit.h> #import "ILView.h" /** * Controls the orientation of the picker */ typedef enum { ILHuePickerViewOrientationHorizontal = 0, ILHuePickerViewOrientationVertical = 1 } ILHuePickerViewOrientation; @class ILHuePickerView; /** * Hue picker delegate */ @protocol ILHuePickerViewDelegate /** * Called when the user picks a new hue * * @param hue 0..1 The hue the user picked * @param picker The picker used */ -(void)huePicked:(float)hue picker:(ILHuePickerView *)picker; @end /** * Displays a gradient allowing the user to select a hue */ @interface ILHuePickerView : ILView { id<ILHuePickerViewDelegate> delegate; float hue; ILHuePickerViewOrientation pickerOrientation; } /** * Delegate */ //@property (assign, nonatomic) IBOutlet id<ILHuePickerViewDelegate> delegate; @property (assign, nonatomic) IBOutlet __unsafe_unretained id<ILHuePickerViewDelegate> delegate; /** * The current hue */ @property (assign, nonatomic) float hue; 

.m文件如下所示:

 #import "ILHuePickerView.h" #import "UIColor+GetHSB.h" @interface ILHuePickerView(Private) -(void)handleTouches:(NSSet *)touches withEvent:(UIEvent *)event; @end @implementation ILHuePickerView @synthesize color, delegate, hue, pickerOrientation; #pragma mark - Setup -(void)setup { [super setup]; 

我看了类似的情况下,看到我需要把“__unsafe_unretained”属性…我这样做(希望正确),但仍然失败的构build。 完整的错误信息是:具有assign属性的属性“委托”的现有ivar“委托”必须是__unsafe_unretained

截图

我究竟做错了什么?

正如错误信息告诉你, 伊娃

 @interface ILHuePickerView : ILView { id<ILHuePickerViewDelegate> delegate; // <-- This is the ivar 

需要声明__unsafe_unretained

 __unsafe_unretained id<ILHuePickerViewDelegate> delegate; 

不是财产:

 @property (assign, nonatomic) IBOutlet id<ILHuePickerViewDelegate> delegate; 

因为ARC所有权限定符不适用于属性; 他们只适用于variables。

由于@synthesize指令为您创build ivar(使用正确的ARC限定符),所以您可以跳过它的声明:

 @interface ILHuePickerView : ILView /** * Delegate */ @property (assign, nonatomic) IBOutlet id<ILHuePickerViewDelegate> delegate; // etc. 

事实上,现在是推荐的程序。 请参阅在TOCPL中定义类 。

我过去使用过ILColorPicker,绝对不是ARC准备好的。 在ILColorPicker类的编译器标志设置中设置-fno-objC-arc