2010-06-04 12 views
8

सीजीआरईटी प्रकार एक संरचना प्रकार है। अगर मैं इस प्रकार के रूप में किसी संपत्ति को परिभाषित करना चाहता हूं, तो क्या मुझे इस प्रकार के लिए असाइन या विशेषता को बनाए रखना चाहिए?संपत्ति मूल्य के रूप में CGRect var?

@interface MyClass { 
    CGRect rect; 
    ... 
} 
@property (nonatomic, assign) CGRect rect; // or retain? 

या मुझे अपना खुद का गेटर और सेटर लिखना है?

उत्तर

17

गैर-ऑब्जेक्ट्स के लिए केवल assign संभव है। (एआरसी, कि CoreFoundation सामान शामिल करने से पहले, उदाहरण, एक CFArrayRef केवल assign हो सकता है।)

@property (nonatomic, assign) CGRect rect; 
//       ^^^^^^ don't forget. 

आप एक कस्टम गेटर और सेटर की जरूरत नहीं है जब तक कि आप काम के लिए memcpy उपयोग करने के लिए नहीं करना चाहती।

+0

धन्यवाद। क्या मुझे कोड में फ़ील्ड द्वारा फ़ील्ड असाइन करने की अपनी सेटिंग की आवश्यकता है? –

+0

@ डेविड: यदि यह सीजीआरईटी है, फ़ील्ड द्वारा फ़ील्ड असाइन करना 'memcpy' के बराबर है। – kennytm

+0

आप रेक्ट कैसे सेट करते हैं ... यह मुझे भ्रमित कर रहा है – Morkrom

1
@property (assign) CGRect rect; 

CGrect एक struct, न कि एक NSObject है, इसलिए आप इसे (retain की तरह) के लिए संदेश नहीं भेज सकते।

पूर्ण सेटअप तो हो जाएगा हों तो वहां की तरह:

// MyClass.h 
@interface MyClass : NSObject 
{ 
    CGRect _rect; 
} 

@property (assign) CGRect rect; 

और

// MyClass.m 
@implementation MyClass 

@synthesize rect=_rect; 

@end 

तो बुनियादी तौर पर आप तो कुछ ऐसा कर सकते हैं:

MyClass *myClass = [[MyClass alloc] init]; 
myClass.rect = CGRectMake(0,0,0,0); 

synthesize निर्देश मूल रूप से "दृश्यों के पीछे" आपके लिए दो तरीकों (गेटर/सेटर) बनाता है; कुछ ...

- (CGRect)rect; 
- (void)setRect:(CGRect)value; 

मैं आमतौर पर अपने उदाहरण वर्रों में "_" जोड़ता हूं। rect=_rect जब भी रेक्ट संपत्ति "कॉल" होती है, तो सही उदाहरण var को संशोधित करने के लिए कंपाइलर को बता रहा है।

these tutorials on Theocaco के माध्यम से पढ़ा है। वह बताता है कि दृश्यों के पीछे @ सिंथेसाइज (आर) क्या कर रहा है।

+0

यह समझ में आता है। अभी भी सुनिश्चित नहीं है कि असाइनमेंट, मेमोरी या फ़ील्ड-बाय-फील्ड करने के लिए जेनरेट कोड क्या हैं? मैंने अपना प्रश्न संपादित किया। –

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