2011-10-07 15 views
29

मैं उद्देश्य सी में एक नेस्टेड निजी वर्ग के लिए एक पैटर्न चाहते हैंउद्देश्य सी में निजी कक्षाएं

आवश्यकताओं हैं:

  • वर्ग दिखाई/अन्य वर्गों के लिए सुलभ नहीं होगा।

      :
    • वर्ग तरीकों (यानी, नहीं एक सी struct)
    • युक्त वर्ग के सदस्यों दिखाई/नेस्टेड वर्ग

    टिप्पणियों को देखते हुए, मैं आवश्यकताओं को सरल बनाने रहा हूँ के लिए सुलभ हैं निष्पादित कर सकते हैं

  • आंतरिक वर्ग अन्य वर्गों के लिए सुलभ हो सकता है, लेकिन दृश्यमान नहीं है (निजी विधियों को छिपाने के लिए एक श्रेणी का उपयोग करने के समान)।
  • भीतरी वर्ग

नेस्ट किए जाने की जरूरत नहीं है यह अभी भी संभव नहीं है?

+0

'कक्षा' के बारे में क्या? – Dani

+1

क्षमा करें, आप जो पूछ रहे हैं वह ओबज-सी में मौजूद नहीं है। –

+0

@ केविन Ballard: यह Obj-C++ – Dani

उत्तर

84

उद्देश्य-सी में औपचारिक घोषणात्मक फैशन में निजी कक्षाओं या निजी आवृत्ति चर के बारे में कोई विचार नहीं है।

इसके बजाय, उद्देश्य-सी में दृश्यता पूरी तरह से नियंत्रित होती है जहां आप कुछ घोषित करते हैं। यदि यह एक हेडर फ़ाइल में है, तो इसे किसी और चीज द्वारा आयात किया जा सकता है। यदि इसे कार्यान्वयन फ़ाइल में घोषित किया गया है, तो यह (उचित रूप से) आयात नहीं किया जा सकता है और इसलिए, उस संकलन इकाई के लिए प्रभावी रूप से निजी है।

और "इसे" द्वारा, मेरा मतलब है कि बहुत कुछ भी घोषित किया जा सकता है; कक्षा, वैश्विक, आदि ...

आईई। यदि आप .m फ़ाइल में कक्षा के लिए जोड़ी रखते हैं, तो वह वर्ग प्रभावी रूप से उस संकलन इकाई के लिए निजी है। बेशक, नामस्थानों के बिना, सुनिश्चित करें कि कक्षा विशिष्ट रूप से नामित है।

Foo.h:

@interface Foo: NSObject 
... public interface 
@end 

Foo.m:


इस पर विचार करें

@interface __FooSupportClass: NSObject 
... interface here ... 
@end 

@implementation __FooSupportClass 
@end 

@interface Foo() 
@property(retain) __FooSupportClass *__fooSupport; 
@end 

@implementation Foo 
@synthesize __fooSupport = fooSupport__; 
... etc ... 
@end 

है कि आप एक निजी-दर-दृश्यता समर्थन वर्ग में ही उपलब्ध देता है आपके कार्यान्वयन के साथ दिखाई देने वाली आपकी कक्षा पर एक इंस्टेंस चर और सेटर/गेटर विधियों के साथ आपका कार्यान्वयन यूनिट या तो।

(ध्यान दें कि ऑब्जेक्टिव-सी "उदाहरण चर", नहीं "सदस्य चर"। वे समान हैं, लेकिन आप बेहतर होगा भाषा की शब्दावली का उपयोग कर देंगे। है)

+0

यह मेरा मूल दृष्टिकोण था। हालांकि, मुझे सदस्य होने के लिए उस आंतरिक वर्ग का एक उदाहरण चाहिए। मैं उसे कैसे कर सकता हूँ? एक आगे @class घोषणा चाल चलाना होगा? – Ovesh

+0

ठीक है, मैंने अभी इसे चेक किया है। ठीक है, यही वह दृष्टिकोण है जिसके साथ मैं जाऊंगा। बेशक, युक्त वर्ग के सदस्यों की समस्या आंतरिक वर्ग के लिए सुलभ नहीं है। – Ovesh

+0

fooSupport से foo के चर का उपयोग कैसे करें? क्या यह संभव है? – Sakthimuthiah

1

वैसे आप हो सकता है " अर्द्ध छिपा "निजी तरीकों। आप एक इंटरफ़ेस फ़ाइल शामिल कर सकते हैं जो कार्यान्वयन फ़ाइल में विस्तार विधियां प्रदान करती है और फिर वहां मौजूद विधियों को लागू करें। मैं इससे पहले उत्सुक था और एक समान सवाल पूछा।

Proper Objective-C Helper "Wannabe" Private methods?

संबंधित मुद्दे