4
我偶然發現了Objective-C中的一些奇怪行爲。 我有一個的main.m:爲屬性創建我自己的setter時的無限遞歸
#include <Foundation/Foundation.h>
#include "AClass.h"
int main(int argc, char* argv[]) {
AClass* tmpClass = [[AClass alloc] init];
[tmpClass setAVariable:12];
return -1;
}
報頭AClass.h:
#include <Foundation/Foundation.h>
@interface AClass: NSObject;
-(void) setAVariable:(int) bVariable;
@property int aVariable;
@end
和一個對應的實現文件AClass.m:
#include <Foundation/Foundation.h>
#include <AClass.h>
@implementation AClass
@dynamic aVariable;
int aVariable;
-(void) setAVariable:(int)bVariable {
NSLog(@"foo:");
self.aVariable = bVariable;
}
@end
當編譯該代碼與任一在Linux上的鏗鏘聲或通過OSX上的Xcode觸發無限遞歸。 我不知道這是否是clang/Objective-C中的錯誤。
你應該知道,你所聲稱的'aVariable'是一個全球性的,而不是你所期待的伊娃。它需要位於'@ implementation'塊頂部的大括號中:'@implementation AClass {int aVariable; }/*等*/@結束' –
這是我的意圖:) –