我有兩個控制器,SyncController和XMLController。 SyncController向XMLController發送一些參數,該參數連接到API並將結果作爲對象包裝在NSMutableArray中,然後將數組返回到SyncController。iPhone NSMutableArray發佈問題
一些代碼:
SyncController.h
-(void)urlHandler:(NSArray *)urlHandler listObjectsFinishedLoading:(NSMutableArray *)resultData;
SyncController.m
- (void)urlHandler:(NSArray *)urlHandler listObjectsFinishedLoading:(NSMutableArray *)resultData;
{
NSMutableArray *receivedObjects = [[NSMutableArray alloc] init];
[receivedObjects addObjectsFromArray:resultData];
for (Object *o in receivedObjects) {
//DO SOME STUFF
}
[receivedObjects release];
}
XMLController.h
@interface XMLController : NSObject {
NSMutableArray *objects;
}
@property (nonatomic, retain) NSMutableArray *objects;
XMLController.m
-(void) connectionDidFinishLoading:(NSURLConnection *) connection {
objects = [[NSMutableArray alloc] init];
if ([delegate respondsToSelector:@selector(urlHandler:listObjectsFinishedLoading:)]) {
[delegate urlHandler:self listObjectsFinishedLoading:objects];
}
//[objects release];
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
// Initialize an Object
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
// Put some properties unto Object
// Ad Object to the objects array
// release Object
}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
//[objects release];
}
- (void)dealloc {
//[objects release];
[super dealloc];
}
我的問題是,我該如何正確釋放對象數組?如果我不釋放它,代碼就可以正常工作(來自// DO SOME STUFF的動作被執行),但它顯然會泄漏。如果我釋放它,無論我做什麼(請參閱評論// [對象發佈];在三個地方)應用程序崩潰。
有什麼建議嗎?謝謝。
這個SO問題解釋了爲什麼這可能是正確的答案:http://stackoverflow.com/questions/1219575/objective-c-release-autorelease-and-data-types – 2010-12-17 10:07:24
謝謝,但沒有它不起作用。仍然崩潰。 – Dann 2010-12-17 10:08:35