मैं MYFileObj को NSMutableArray (fileArray) में स्टोर करने और UITavleView (टेबलव्यू) पर डेटा प्रदर्शित करने की आशा करता हूं।

//----------------------------------MYFileObj
#import <UIKit/UIKit.h>


@interface MYFileObj :  NSObject  {

    NSString *fileName;

}

-(void) setFileName:(NSString *)s ;
-(NSString *) fileName ;


@end

वह सरणी जिसे मैं डेटा स्टोर करना चाहता हूं

NSMutableArray *fileArray;

मैंने नई वस्तु बनाई और फ़ाइल में जोड़ेंअरे

MYFileObj *newobj=[[MYFileObj alloc] init ];
NSString *ss=[[NSString alloc] initWithFormat:@"%@",path]  ;
[newobj setFileName:ss];
[ss release];
[fileArray addObject:newobj];
[newobj release];

[atableview reloadData];

पहली बार डेटा को फिर से लोड करने और कुछ करने के बाद, मैं फ़ाइल को फिर से लोड करना चाहता हूं और एटेबलव्यू को फिर से तैयार करना चाहता हूं।

//code to remove all object in atableview
if([fileArray count]>0)
{  
   [fileArray removeAllObjects];
   [atableview reloadData];
}  

मैंने देखा है कि स्मृति रिसाव हैं। मुझे उम्मीद है कि "removeAllObjects" विधि केवल MYFileObj को हटा देती है या MYFileObj की सदस्य संपत्ति "फ़ाइल नाम" को भी हटा देती है?

धन्यवाद

इन्टरडेव

1
arachide 25 अप्रैल 2010, 15:02
कृपया घोषित संपत्तियों का उपयोग करें। इंटरफ़ेस में @property(copy,nonatomic) NSString* fileName; और कार्यान्वयन में @synthesize fileName; के साथ गेट्टर और सेटर स्वचालित रूप से बनाए जा सकते हैं।
 – 
kennytm
25 अप्रैल 2010, 16:55

3 जवाब

सबसे बढ़िया उत्तर

सेटर में रिटेन/रिलीज का उपयोग करना एक अच्छा अभ्यास है। इस तरह आप अनावश्यक वस्तु निर्माण/प्रतिलिपि से बचते हैं:

- (void)setFileName:(NSString *)s {
    [s retain]; // <- Retain new value
    [fileName release]; // <- Release old value
    fileName = s;
}

- (NSString *)fileName {
    return fileName;
}

- (void)dealloc {
    [fileName release]; // <- Release the instance
    [super dealloc];
}
1
Laurent Etiemble 25 अप्रैल 2010, 21:22
गलत सेटर। [obj setFileName:[obj fileName]] आपके ऐप को क्रैश कर देगा।
 – 
kennytm
25 अप्रैल 2010, 16:52
सेटर फिक्स्ड (मुझे आशा है)। धन्यवाद।
 – 
Laurent Etiemble
25 अप्रैल 2010, 21:22

आप यह नहीं बताते कि आपने स्मृति रिसाव का पता कहाँ लगाया है, लेकिन मैं पोस्ट कोड से मान लूंगा कि आप MyFileObj की डीललोक विधि में फ़ाइल नाम जारी नहीं कर रहे हैं।

2
Claus Broch 25 अप्रैल 2010, 15:09

यह निर्भर करता है कि आपने setFileName और dealloc को अपनी MyFileObj कक्षा में कैसे लागू किया। क्या आप release संदेश fileName को dealloc में भेजते हैं? क्या आप इसे अपने सेटर में retain भेजते हैं?

0
matei 25 अप्रैल 2010, 15:08