2012-01-27 11 views
8

मैं अभी भी उद्देश्य-सी के लिए नया हूं और संपत्ति सेट करते समय असाइन, रखरखाव, प्रतिलिपि, मजबूत इत्यादि का उपयोग करने के उचित तरीके को समझने की कोशिश करने में कुछ कठिनाइयों का सामना कर रहा हूं।असाइन, रखरखाव, प्रतिलिपि, मजबूत पर स्पष्टीकरण?

उदाहरण के लिए, मेरे पास निम्नलिखित प्रकार घोषित किए गए हैं - मुझे गुणों को कैसे सेट करना चाहिए?

@property (nonatomic, ??) NSMutableArray *myArray 
@property (nonatomic, ??) NSString *myString 
@property (nonatomic, ??) UIColor *myColor 
@property (nonatomic, ??) int *myIn 
@property (nonatomic, ??) BOOL *myBOOL 

धन्यवाद ....

उत्तर

20

दोहराने में मदद करता है, तो यह संदर्भ पर निर्भर करता है। एक गैर-एआरसी स्थिति में:

@property (nonatomic, copy) NSMutableArray *myArray 
@property (nonatomic, copy) NSString *myString 
@property (nonatomic, retain) UIColor *myColor 
//Note the change to an int rather than a pointer to an int 
@property (nonatomic, assign) int myInt 
//Note the change to an int rather than a pointer to an int 
@property (nonatomic, assign) BOOL myBOOL 

myArray पर प्रतिलिपि किसी अन्य वस्तु आप सेट के "मालिक" द्वारा संशोधन को रोकने के लिए है। एक एआरसी परियोजना में, चीजें थोड़ा बदलती हैं:

@property (nonatomic, copy) NSMutableArray *myArray 
@property (nonatomic, copy) NSString *myString 
@property (nonatomic, strong) UIColor *myColor 
//Note the change to an int rather than a pointer to an int 
@property (nonatomic, assign) int myInt 
//Note the change to an int rather than a pointer to an int 
@property (nonatomic, assign) BOOL myBOOL 

परिवर्तन मुख्य रूप से आपकी स्थिति में मायकोलर है। आप retain का उपयोग नहीं करेंगे क्योंकि आप सीधे संदर्भ गणना का प्रबंधन नहीं कर रहे हैं। strong कीवर्ड संपत्ति का "स्वामित्व" और retain के समान है। एक अतिरिक्त कीवर्ड भी प्रदान किया जाता है, weak, जो आमतौर पर ऑब्जेक्ट प्रकारों के लिए असाइन करने के स्थान पर उपयोग किया जाएगा। weak संपत्ति का ऐप्पल का सामान्य उदाहरण प्रतिनिधियों के लिए है। मैं के माध्यम से Memory Management Guide के अलावा एक या दो बार के माध्यम से जाने की अनुशंसा करता हूं क्योंकि एक एसओ पोस्ट में आसानी से कवर किया जा सकता है।

+0

धन्यवाद डेविड। बस इंगित करने के लिए, 'मजबूत' का उपयोग करके 'बनाए रखने' के लिए केवल "समान" से अधिक है, यह एक प्रत्यक्ष पर्याय है (जो मुझे यकीन है कि आप पहले से ही जानते थे, बस इसे अन्य पाठकों के लिए वर्तनी करना चाहते थे) http: // developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226-CH1-SW4 – dooleyo

0
@property (nonatomic, copy) NSMutableArray *myArray 
@property (nonatomic, copy) NSString *myString 
@property (nonatomic, retain) UIColor *myColor 
@property (nonatomic) int myIn 
@property (nonatomic) BOOL myBOOL 

प्रतिलिपि परिवर्तनशील वस्तुओं, या इस तरह के NSString के रूप में परिवर्तनशील उपवर्गों के साथ वस्तुओं: यह उन्हें बंद हो जाता है एक और स्वामी द्वारा ही संशोधित किया जा रहा। हालांकि मुझे नहीं लगता है अपने सेब द्वारा सुझाए गए गुण

अन्य वस्तुओं आम तौर पर रखा जाता है के रूप में परिवर्तनशील वस्तुओं का उपयोग करने के, एक अपवाद है प्रतिनिधियों, जो स्वामित्व लूप

पुरातन int और BOOL की तरह आवंटित कर रहे हैं रोकने के लिए आवंटित कर रहे हैं के साथ , यह @property के लिए डिफ़ॉल्ट विकल्प है, इसलिए इसे निर्दिष्ट करने की आवश्यकता नहीं है, हालांकि अगर आपको लगता है कि यह पठनीयता

+2

ऐप्पल द्वारा संपत्ति के रूप में एक म्यूटेबल ऑब्जेक्ट का उपयोग क्यों नहीं किया जाएगा? (मुझे यह स्पष्ट करना चाहिए कि ये सिंगलटन में हैं) – wayneh

+0

मुझे लगता है कि यह एक सुरक्षा बात है, कहें कि आप किसी ऑब्जेक्ट को एनएसएमयूटेबलस्ट्रिंग पास करते हैं जो इसे बरकरार रखता है। वह ऑब्जेक्ट अब आपके डेटा को संशोधित कर सकता है (जो हो सकता है कि आप अपनी कक्षाएं हों, लेकिन यदि अपरिवर्तनीय प्रकारों से चिपकना सुरक्षित नहीं है)। मैं देखता हूं कि हार्ड नियम – wattson12

+0

की तुलना में इसकी एक सिफारिश है। मैं इन्हें अपनी कक्षाओं में सिंगलटन के रूप में उपयोग कर रहा हूं और उन्हें बदलने की जरूरत है। मैं एक अपरिवर्तनीय सरणी भी स्थापित करने की कोशिश कर रहा हूं, लेकिन समस्याएं हैं। आपकी सहायता के लिए धन्यवाद. http://stackoverflow.com/questions/9026679/can-i-init-an-nsarray-in-a-singleton-with- विशिष्ट-values-like-a-const – wayneh

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