में दायरे से बाहर आवृत्ति चर मेरे पास एक सुपरक्लास और सबक्लास है, जिसमें से दोनों आवृत्ति चर परिभाषित करते हैं। सुपर क्लास कीउद्देश्य-सी: डीबगर
असहज रूपरेखा:
/* GenericClass.h */
@interface GenericClass : NSObject {
/* some variables */
}
@end
/* GenericClass.m */
@implementation GenericClass
/* ... */
@end
उपवर्ग की रूपरेखा:
/* 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];
}
जब मैं वर्गों है कि NSObject से सीधे वारिस उपयोग कर रहा हूँ, एक आत्म> सूचक जरूरत नहीं है। ध्यान दें कि पैरेंट जेनेरिक क्लास में परिभाषित नाम स्ट्र के साथ कोई ऑब्जेक्ट नहीं है। तो, मेरा सवाल यह है कि, आत्म-> str के रूप में संदर्भित नहीं होने पर स्कोप से बाहर क्यों है? कोड स्वयं काम करता है, लेकिन मैं डीबगर
यह एक अच्छा स्पष्टीकरण है कि जीडीबी कैसे काम करता है, धन्यवाद! लेकिन अभी भी एक बात है जो मुझे भ्रमित कर रही है। मेरे पास superclass में परिभाषित चर है; आइए एक एनएसएमयूटेबल स्ट्रिंग * सुपरस्ट्र को कॉल करें। विशिष्ट क्लास के कार्यान्वयन में अपने आप पर "सुपरस्ट्र" का एक संदर्भ ठीक काम करता है। लेकिन विशिष्ट क्लास.h में परिभाषित एक चर "str" तक पहुंचने का प्रयास स्वयं-> का उपयोग किये बिना डीबगर में काम नहीं करता है। जीडीबी को विरासत चर कैसे मिलता है, लेकिन इस वर्ग के अपने शीर्षलेख में परिभाषित नहीं किया गया है? अगर मैं विरासत का उपयोग नहीं कर रहा हूं, तो यह भी ठीक काम करता है। यह XCode –
में एक बग की तरह लगता है डीबगर कंसोल विंडो (⇧⌘R) में 'po str' और 'po superstr' आज़माएं। यदि वे एक ही परिणाम देते हैं, तो समस्या के पास एक्सकोड (जो संभवतः) के साथ कुछ लेना देना नहीं है। –
विचित्र रूप से पर्याप्त, पीओ स्ट्र और पीओ सुपरस्ट्र कंसोल में ठीक काम करते हैं, जैसे पीओ स्वयं-> str और po self-> superstr। यह केवल दृश्य डीबग यूआई में है जहां माउस के साथ स्थानांतरित होने पर स्कोप से बाहर होने वाली रिपोर्ट - लेकिन कोड के काम में पढ़ना/लिखना ऑपरेशन ठीक है। मैं इसे ऐप्पल के साथ एक बग के रूप में लॉग करूंगा। इस बीच मैं स्वयं-> हर जगह (हालांकि मैं नहीं करना चाहूंगा) का उपयोग कर रहा हूं ताकि मैं दृष्टि से डीबग कर सकूं। –