开发者

How to release an object from an Array?

开发者 https://www.devze.com 2023-02-03 10:48 出处:网络
I am currently working on an demo app so I was a little sloppy how to get things done, however I run the \"Build and Analyze\" to see how many leaks I get,... well and there are a lot.

I am currently working on an demo app so I was a little sloppy how to get things done, however I run the "Build and Analyze" to see how many leaks I get,... well and there are a lot.

Source of teh proble is that I have a NSMutableArray and I add some Objects to it :

NSMutableArray *arr = [[NSMutableArray alloc] init];
[arr addObject:[[MyObject alloc] initWithText:@"Option1"]];
// I have like 100 lines like that and 100 complains

Now, xcode complains about 开发者_如何转开发a potential leak.

Can someone give me some advice how to handle that ?

Thanks.


The problem is that you're allocating an instance of MyObject which you have a responsibility to release. When you pass it to the array, the array also retains the object, so now both you and the array have to release it. You can simply autorelease the object, and the array will keep it retained until you remove the object from the array or destroy the array itself.

[arr addObject:[[[MyObject alloc] initWithText:@"Option1"]] autorelease];


Replace

[arr addObject:[[MyObject alloc] initWithText:@"Option1"]];

with

[arr addObject:[[[MyObject alloc] initWithText:@"Option1"] autorelease]];

Most collections (arrays, dictionaries) own the objects added to them. And, since you’ve sent +alloc to MyObject, you also own the object that’s just been instantiated. As the memory management rules say, you are responsible for relinquishing ownership of objects you own. Sending -autorelease to the newly instantiated object will do that.

0

精彩评论

暂无评论...
验证码 换一张
取 消