सामान आप करते हैं के बहुमत के लिए, ->
का उपयोग नहीं जब तक आप ऑब्जेक्टिव-सी के साथ सी या सी ++ कोड लिख रहे है। यदि आप गुण बनाते हैं और उन्हें उचित रूप से संदर्भित करते हैं तो यह आपके लिए आसान है, कंपाइलर और मेमोरी प्रबंधन।
@interface MYObject : NSObject {
@public // don't use this, please!
MYOtherObject *obj;
}
@property (retain) MYOtherObject *obj;
@end
@implementation MYObject
@synthesize obj;
@end
// later in your code
MYObject *thing = [[MYObject alloc] init];
MYOtherObject *other;
// Good
other = [thing obj];
other = thing.obj;
other = [thing valueForKey:@"obj"]; // I hope my KVC is correct here. :(
// Bad, and soon to be deprecated I believe. (all members are @protected unless you use @public)
other = thing->obj;
यह बुरा क्यों है? आप इस तरह कार्यान्वयन फ़ाइल में सदस्यों की घोषणा कर सकते हैं: (64-बिट और iPhone)
@interface MYObject : NSObject
@property (retain) MYOtherObject *obj;
@end
@implementation MYObject
@synthesize obj = _obj;
@end
यहाँ, thing->obj
बुला लेकिन त्रुटियों कुछ भी नहीं निकलेगा के बाद से सदस्य कार्यावधि में गतिशील रूप से आवंटित किया जाता है।
इसके अलावा, के रूप में उपयोगकर्ता @Peter Hosey बताते हैं, आप ->
तरह सी ++ 'copyWithZone
तथापि तरह के तरीकों में रों Friend
उपयोग कर सकते हैं, अगर आप इस तरह सामान नहीं कर रहे हैं, तो दूर रहो!
[संपादित करें]
इसके अलावा, तो आप ->
इस्तेमाल कर सकते हैं अगर आप वस्तु से बाहर प्रदर्शन निचोड़ की कोशिश कर रहे हैं और आपको पता क्या आपको लगता है कि वस्तु या किसी सदस्य के साथ कर रहे हैं छोड़ विधि-लुकअप का ओवरहेड। फिर भी, तथापि, तुम सिर्फ C++ या सी में उन वर्गों कोड करने के लिए करता है, तो प्रदर्शन है चाहते हो सकता है कि एक मुद्दे के बड़ा।
ओह, इसके अलावा, मुझे नहीं लगता कि ->
का उपयोग थ्रेड-सुरक्षित है। यदि आपका गेटर/सेटर @synchronize
का उपयोग ->
का उपयोग करता है तो सुरक्षित गार्ड को बाईपास कर देगा।
स्रोत
2011-01-19 15:02:03
आत्म> "" मैं हाल ही में एक कोड के लिए का एक बहुत का उपयोग कर अवगत कराया गया था "। .. चारों ओर मुड़ें ... भागो !!!! –