我使用ARC(不,这不是NDA)。我用
在接口中声明变量id itemDelegate;
然后声明属性:
@property (nonatomic, weak) id<mySecretDelegateYouAreNotSupposedToSeeOnSO> itemDelegate;
(由于ARC,用弱代替赋值)
在我的实现文件中,我简单地合成它:@synthesize itemDelegate;
然而,我得到错误:
"Existing ivar 'ItemDelegate' for _weak property 'itemDelegate' must be _weak".
有人知道怎么回事吗?谢谢你的帮助。
ARC -自动引用计数
尝试如下内容(示例来自:http://vinceyuan.blogspot.com/2011/06/wwdc2011-session-323-introducing.html):
@interface SomeObject : NSObject {
__weak id <SomeObjectDelegate> delegate;
}
@property (weak) id <SomeObjectDelegate> delegate;
@end
请注意ivar的声明方式
使用ARC和iPhone模拟器5.0,以下似乎工作得很好(没有警告等…):
SomeObject.h
@class SomeObject;
@protocol SomeObjectDelegate <NSObject>
- (void)someObjectDidFinishDoingSomethingUseful:(SomeObject *)object;
@end
@interface SomeObject : NSObject {
__unsafe_unretained id <SomeObjectDelegate> _delegate;
}
@property (nonatomic, assign) id <SomeObjectDelegate> delegate;
@end
SomeObject.m
#import "SomeObject.h"
@implementation SomeObject
@synthesize delegate = _delegate;
@end
有一个问题,即使你按照苹果的要求从Mac App Store更新XCode(4.2+),它也会在你的电脑上留下旧版本的XCode。如果你把XCode固定在你的launchpad上,然后启动它,你会得到所有这些错误,如下所示。你必须找到新版本的XCode,比如使用Spotlight功能,运行它,然后作为它的第一个任务之一,它会删除旧版本的XCode。这样就不会再有类似的错误报告了。