我偶然发现了 Objective-C 中的一些奇怪行为。我有一个 main.m:
#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 上使用 clang 或通过 OSX 上的 Xcode 编译此代码时,setAVariable:
会触发无限递归。我想知道这是否是 clang/Objective-C 中的错误。