2011-02-15 17 views
56

है, मैं @property सिंटैक्स का उपयोग संश्लेषित संपत्ति घोषित करने के लिए करना चाहता हूं जो सार्वजनिक रूप से पढ़ा जाता है लेकिन एक सेटटर जिसे कक्षा के भीतर से निजी रूप से बुलाया जा सकता है।ऑब्जेक्टिव-सी प्रॉपर्टी जो सार्वजनिक रूप से सार्वजनिक रूप से है, लेकिन इसमें निजी सेटर

चूंकि यह उद्देश्य-सी है, इसका मूल रूप से मतलब है कि setFoo: विधि संश्लेषित की जाएगी, लेकिन इसे कक्षा के बाहर बुलाए जाने के परिणामस्वरूप एक चेतावनी (अपरिचित चयनकर्ता) होगा। चेतावनी को ट्रिगर करने के लिए मुझे संपत्ति readonly घोषित करना है; क्या एक संश्लेषित सेटटर को मजबूर करने का कोई तरीका है जो केवल कक्षा के भीतर उपलब्ध है?

उत्तर

87

मुझे लगता है कि आप जो खोज रहे हैं उसे कक्षा एक्सटेंशन कहा जाता है। आप केवल पढ़ने के शीर्षक में संपत्ति की घोषणा करेंगे:

@interface MyClass : NSObject { 
} 

@property (readonly, assign) NSInteger myInteger; 

@end 

फिर कार्यान्वयन फ़ाइल में अपनी कक्षा विस्तार में redeclare:

@interface MyClass() 

@property (readwrite, assign) NSInteger myInteger; 

@end 


@implementation MyClass 

@end 

और देखें के लिए एप्पल के documentation

+1

आप सही हैं , यह भी देखें http://stackoverflow.com/questions/743586/synthesizing-properties-in-categories/3251621#3251621 –

+3

आवश्यक encapsulation बनाए रखते हुए गुणों की सुविधा का लाभ उठाने का यह एक शानदार तरीका है। :) इस क्षमता को प्यार करो। – LucasTizma

+5

अद्यतन दस्तावेज लिंक: http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html#//apple_ref/doc/uid/TP40011210-CH6-SW3 –

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