Я нашел то, что, по моему мнению, может быть ошибкой с Ivar и Objective-C. Я использую XCode 3.2.1 и связанные библиотеки, разрабатывая 64-битное приложение на X86_64 (MacBook Pro).Определения Ivar показывают кодировку «длинного» типа как кодировку «длинного длинного»
Где бы я ожидал, что кодировка типа для «longVal» будет «l», кодировка Ivar показывает «q» (которая является «длинной длинной»).
Кто-нибудь еще видел это? Упрощенный код и вывод следующим образом:
Код:
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface Bug : NSObject
{
long longVal;
long long longerVal;
}
@property (nonatomic,assign) long longVal;
@property (nonatomic,assign) long long longerVal;
@end
@implementation Bug
@synthesize longVal,longerVal;
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
unsigned int ivarCount=0;
Ivar *ivars= class_copyIvarList([Bug class], &ivarCount);
for(unsigned int x=0;x<ivarCount;x++) {
NSLog(@"Name [%@] encoding [%@]",
[NSString stringWithCString:ivar_getName(ivars[x]) encoding:NSUTF8StringEncoding],
[NSString stringWithCString:ivar_getTypeEncoding(ivars[x]) encoding:NSUTF8StringEncoding]);
}
[pool drain];
return 0;
}
А вот выход из отладочной консоли:
This GDB was configured as "x86_64-apple-darwin".tty /dev/ttys000
Loading program into debugger…
sharedlibrary apply-load-rules all
Program loaded.
run
[Switching to process 6048]
Running…
2010-03-17 22:16:29.138 ivarbug[6048:a0f] Name [longVal] encoding [q]
2010-03-17 22:16:29.146 ivarbug[6048:a0f] Name [longerVal] encoding [q]
(gdb) continue
Не красивая картинка!
- Frank
Что сказал zneak; нет ошибки. Тем не менее, есть много других ошибок с '@ encode' и друзьями. Вниз по этому пути лежат ловушки. Пожалуйста, убедитесь, что вы делаете ошибки в отношении как конкретных проблем, так и ошибки, детализируя то, что вы пытаетесь сделать. – bbum