我正在使用ARC(不,这不是NDA)。我在
的界面中宣布我的ivarid itemDelegate;
然后我声明属性:
@property (nonatomic, weak) id<mySecretDelegateYouAreNotSupposedToSeeOnSO> itemDelegate;
(由于ARC而弱而不是分配)
在我的实现文件中,我只需合成它:@synthesize itemDelegate;
但是,我收到错误:
"Existing ivar 'ItemDelegate' for _weak property 'itemDelegate' must be _weak".
任何人都知道什么是错的?谢谢你的帮助。
ARC - 自动参考计数
答案 0 :(得分:46)
尝试以下内容(示例来自: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是如何宣布的。
答案 1 :(得分:9)
使用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
答案 2 :(得分:1)
存在一个问题,即使您从Apple App Store更新XCode(4.2+),Apple也会在您的计算机上保留旧版XCode。因此,如果您将XCode固定到启动板并启动它,您将收到所有这些错误,如下所示。您必须找到较新版本的XCode,比如使用Spotlight功能,运行它,然后作为其首要任务之一,它会删除旧版本的XCode。那么你就不会再有这样的错误报告了。