Я наткнулся на какое-то странное поведение в 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
При компиляции этого кода с помощью clang в Linux или через Xcode в OSX setAVariable:
запускает бесконечную рекурсию. Интересно, это ошибка в clang/Objective-C.
aVariable
предназначено для глобального, а не ivar, как вы, кажется, ожидаете. Он должен быть заключен в фигурные скобки вверху блока@implementation
:@implementation AClass { int aVariable; } /* etc. */ @end
- person jscs   schedule 17.04.2013