при работе над проектом Mac OS (значение не iPhone) требование 10.6 и составляет 64 бита, позволяет мне использовать свойства для генерации и методов доступа и переменных экземпляра в заголовочном файле. но во время отладки я не вижу, как посмотреть на значения свойств объекта после того, как они были заполнены. там некоторая сборка устанавливает, который должен быть включен?
если я объявляю переменные экземпляра объекта (между {} в заголовке), то я вижу те значения (когда они используются) во время отладки или в самом окне отладки, или при помощи парения курсора по выделенному приему строки в редакторе во время повреждения, или путем выполнения cli в gdb как 'p *объект', например.
старый путь:
@class Suit;
@interface Card : NSObject
{
NSNumber *playOrder;
Suit *suit;
NSNumber *displayNumber;
NSNumber *orderIndex;
}
@property(nonatomic, retain) Suit *suit;
@property(nonatomic, retain) NSNumber *displayNumber;
@property(nonatomic, retain) NSNumber *orderIndex;
новый путь:
@class Suit;
@interface Card : NSObject
@property(nonatomic, retain) Suit *suit;
@property(nonatomic, retain) NSNumber *displayNumber;
@property(nonatomic, retain) NSNumber *orderIndex;
@property(nonatomic, retain) NSNumber *playOrder;
в этом новомодные 10.6 потребовали идеи на 64 бита (который кажется более простым мне), ни один из этих методов отладки не отображает значения объекта. я полагаю, что мне нужно было выключить что-то, потому что эта более новая идея, не кажется лучше.
gdb заканчивается для старого пути:
(gdb) po newCard
New Card : 0 of Suit : Hearts (NSCalibratedRGBColorSpace 1 0 0 1). with orderIndex of: 1
(gdb) p *newCard
$1 = {
= {
isa = 0x100002188
},
members of Card:
playOrder = 0x0,
suit = 0x200053a20,
displayNumber = 0x20001bac0,
orderIndex = 0x200012de0
}
(gdb)
gdb заканчивается для нового пути:
(gdb) po newCard
New Card : 0 of Suit : Hearts (NSCalibratedRGBColorSpace 1 0 0 1). with orderIndex of: 1
(gdb) p *newCard
$3 = {
= {
isa = 0x100002188
}, }
(gdb)
так смотря на документы для объективных-c 2.0:
описывает то, что я отсылаю к (синтезирующий переменные экземпляра в 'современном' времени выполнения), но что не сказано нигде, то, что, если Вы делаете это, значения не будут доступны во время отладки.
я нашел страницу SO с уместной информацией, но не сфокусировался на этом эффекте: Используя переменные экземпляра с современным Временем выполнения
что я пропускал?
Я предполагаю, что вы @синтезируете
эти переменные?
Вам также может понадобиться { }
в интерфейсе, чтобы компилятор знал, куда их поместить.
@interface Card : NSObject
{
}
Я бы избегал такого синтаксиса... особенно если вы сами определяете свойства.
Также посмотрите
и попробуйте вывести список ivars для класса. Я постоянно использую следующее для отладки методов или классов из API, по которым нет документации.
unsigned int total_method_count = 0;
Method * method_list = class_copyMethodList(object_getClass([obj class]), &total_method_count);
@try
{
int method_counter = 0;
for (method_counter = 0; method_counter < total_method_count; method_counter++)
{
Method method = method_list[method_counter];
// check if method the KVC getter you are interested in
NSLog(@"Method: %s", sel_getName(method_getName(method)));
}
} @catch (NSException *e) {
//Do Nothing
}