__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
。