我已經繼承了我正在轉向ARC的Objective-C代碼。我有一些是申報的協議和接口引用彼此.h文件 - 這裏是在.h文件的基本格局轉換爲ARC - 解析前向引用
@class BasicService;
@class BasicServiceObserver;
@protocol BasicServiceObserver
-(void)UPnPEvent:(BasicService*)sender events:(NSDictionary*)events;
@end
@interface BasicService : NSObject <Events_Observer> {
<<var declarations here>>
}
-(NSUInteger)addObserver:(BasicServiceObserver*)obs;
-(NSUInteger)removeObserver:(BasicServiceObserver*)obs;
-(BOOL)isObserver:(BasicServiceObserver*)obs;
@end
,並在.m文件中,BasicServiceObserver裁判標記作爲前瞻性參考。 .m文件包含上述.h文件。
//Events_Observer
-(void)someEvent:(NSDictionary*)events{
BasicServiceObserver *obs = nil;
[mMutex lock];
NSEnumerator *listeners = [mObservers objectEnumerator];
while(obs = [listeners nextObject]){
[obs someEvent:self events:events]; // <-- Receiver type 'BasicServiceObserver' for instance message is a forward declaration
}
[mMutex unlock];
}
驅使我堅果。我試圖將協議分成自己的.h文件並導入它(並刪除@class聲明)。那裏沒有快樂。
有關如何解決此問題的任何想法?
謝謝!
這是無效的:'BasicServiceObserver * obs = nil;'。它應該是; 'id obs = nil;'。 –
rmaddy
如果你正在聲明它,你不需要設置'@class BasicServiceObserver'。此外,'BasicServiceObserver'不是類,所以你不能使用'@ class' – Daniel
另外,就像一個提示,如果你只是將文件移動到ARC以便能夠將項目設置爲ARC。您還可以選擇性地禁用特定文件的ARC。 – Daniel