मैं एआरसी के तरीके को समझने की कोशिश कर रहा हूं, और जहां तक मुझे पता है, मुझे यहां कुछ गलत करना चाहिए। इस कोड को मैं उपयोग कर रहा हूँ है:आईओएस एआरसी - कमजोर और मजबूत गुण
इंटरफ़ेस:
@interface ViewController : UIViewController{
}
@property (strong, nonatomic) NSString * myString ;
@property (weak, nonatomic) NSString * myPointer ;
कार्यान्वयन:
- (void)viewDidLoad{
[super viewDidLoad];
self.myString = @"Hello world!" ; // myString is strong
self.myPointer = self.myString ; // myPointer var is weak
[self performSelector:@selector(makeNilMyValue) withObject:nil afterDelay:1];
[self performSelector:@selector(printValues) withObject:nil afterDelay:2];
}
- (void) makeNilMyValue{
self.myString = nil ;
}
- (void) printValues{
NSLog(@"myString: %@", self.myString) ;
NSLog(@"myPointer: %@", self.myPointer) ;
}
इस क्रियान्वित करने के बाद, मैं मिलता है:
2012-02-26 11:40:41.652 test1[933:207] myString: (null)
2012-02-26 11:40:41.653 test1[933:207] myPointer: Hello world!
हैं मैं गलत नहीं हूँ, मेरे सूचक के कारण है कमजोर, यह वस्तु की सामग्री को बनाए रखना नहीं चाहिए। तो, इसे "हैलो वर्ल्ड!" के बजाय शून्य दिखाना चाहिए।
मैं क्या गलत कर रहा हूं?
कालेब के जवाब के बाद, मैं एक कमजोर सूचक बनाया है, नीचे दिए गए कोड देखें:
- (void)viewDidLoad{
[super viewDidLoad];
self.myString = @"Hello world!" ; // myString is strong
self.myPointer = self.myString ; // myPointer var is weak
self.myPointer2 = self.myString ; // myPointer2 var is weak
[self performSelector:@selector(makeNilMyValue) withObject:nil afterDelay:1];
[self performSelector:@selector(printValues) withObject:nil afterDelay:2];
}
- (void) makeNilMyValue{
self.myPointer2 = @"value changed!" ;
self.myString = nil ;
}
- (void) printValues{
NSLog(@"myString: %@", self.myString) ;
NSLog(@"myPointer: %@", self.myPointer) ;
}
बात यह है कि मैं अभी भी एक ही जवाब मैं किया करते थे मिल गया:
2012-02-26 12:08:13.426 test1[1333:207] myString: (null)
2012-02-26 12:08:13.427 test1[1333:207] myPointer: Hello world!
शानदार उत्तर, बहुत धन्यवाद। – RGML