声明委托ivar时出现ARC错误

时间:2011-08-11 06:41:30

标签: iphone ios automatic-ref-counting

我正在使用ARC(不,这不是NDA)。我在

的界面中宣布我的ivar
id itemDelegate;

然后我声明属性:

@property (nonatomic, weak) id<mySecretDelegateYouAreNotSupposedToSeeOnSO> itemDelegate;(由于ARC而弱而不是分配)

在我的实现文件中,我只需合成它:@synthesize itemDelegate;

但是,我收到错误:

"Existing ivar 'ItemDelegate' for _weak property 'itemDelegate' must be _weak".

任何人都知道什么是错的?谢谢你的帮助。

ARC - 自动参考计数

3 个答案:

答案 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。那么你就不会再有这样的错误报告了。