Her ikisi de örnek değişkenlerini tanımlayan bir üst sınıfı ve bir alt sınıfa sahibim. superclassAmaç-C: hata ayıklayıcısında kapsam dışı örnek değişkenler
Kaba taslak: alt sınıfının
/* GenericClass.h */
@interface GenericClass : NSObject {
/* some variables */
}
@end
/* GenericClass.m */
@implementation GenericClass
/* ... */
@end
Anahat:
/* SpecificClass.h */
#import "GenericClass.h"
@interface SpecificClass : GenericClass {
NSMutableString *str;
}
/* SpecificClass.m */
#import "SpecificClass.h"
@implementation SpecificClass
- (void)aMethod {
//Debugger reports str as out of scope
str = [[NSMutableString alloc] initWithCapacity:100];
//Works fine:
self->str = [[NSMutableString alloc] initWithCapacity:100];
//Doesn't compile as I haven't defined @property/@synthesize:
self.str = [[NSMutableString alloc] initWithCapacity:100];
}
Ben NSObject doğrudan devralan sınıfları kullanıyorum, bir öz> işaretçi ihtiyacı yoktur. Ana GenericClass'da tanımlanmış str adıyla hiçbir nesne bulunmadığını unutmayın. Öyleyse, sorum şu ki, self-> str olarak başvurulmadığında neden kapsam dışı kalıyor? Kod kendi içinde çalışır, ancak ben debugger
Bu GDB'nin nasıl çalıştığına dair iyi bir açıklamadır, teşekkürler! Ama hala beni kafa karıştırıcı bir şey var. Üst sınıfta tanımlanan değişkenler var; Bir NSMutableString * superstr diyelim. SpecificClass uygulamasında kendi başına "superstr" referansı iyi çalışıyor. Ancak SpecificClass.h dosyasında tanımlanan bir "str" değişkenine erişmeye çalışmak, self-> kullanmadan hata ayıklayıcıda çalışmaz. GDB kalıtsal bir değişkeni nasıl buluyor, fakat bu sınıfın kendi başlığında tanımlanmış olanı değil? Eğer miras kullanmıyorsam, bu da gayet güzel çalışıyor. XCode –
Denemesi "Debugger Console" penceresinde (⇧⌘R) "str" ve "po superstr" öğelerinde bir hata gibi görünüyor. Aynı sonuçları verirse, sorunun Xcode ile ilgisi yoktur (muhtemelen). –
İşin tuhafı, po str ve po superstr konsolda iyi çalışır, çünkü kendinden> str ve po self-> superstr. Sadece görsel hata ayıklama kullanıcı arabiriminde, kendini kullanmayan str değişkeninin, fareyle birlikte taşınırken kapsam dışı kalması, ancak koddaki okuma/yazma işlemleri gayet iyi çalışıyor. Apple ile bir hata olarak günlüğe kaydederim. Bu arada ben her yerde (kullanmamayı tercih etsem de) kullanıyorum, böylece görsel olarak hata ayıklayabiliyorum. –