私は2つのコントローラSyncControllerとXMLControllerを持っています。 SyncControllerはいくつかのパラメータをXMLControllerに送ります。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];
}
私の質問は、オブジェクト配列を正しく解放する方法です。私がそれを解放しなければ、コードは正常に動作します(//何かの処理が実行されます)が、明らかにリークします。私がそれをリリースした場合はどこでも(コメント付き// [オブジェクトのリリース]参照; 3箇所で)アプリケーションがクラッシュします。
提案がありますか?ありがとう。
これはなぜこれが正解かもしれないかを説明します:http://stackoverflow.com/questions/1219575/objective-c-release-autorelease-and-data-types –
ありがとうございますが、うまくいきません。まだクラッシュします。 – Dann