如何删除对象? 例如,我有NSDictionary中,并从它的一些NSString的:在obj-c中删除对象
NSDictionary *dict = [NSDictionary dictionaryWithObjects....];
NSString *str = [dict objectForKey:@"key"];
[str release];
或[str dealloc];
或str = nil
或它的自动释放对象?
如果我会删除不自动释放字典,将所有子去掉吗?
如何删除对象? 例如,我有NSDictionary中,并从它的一些NSString的:在obj-c中删除对象
NSDictionary *dict = [NSDictionary dictionaryWithObjects....];
NSString *str = [dict objectForKey:@"key"];
[str release];
或[str dealloc];
或str = nil
或它的自动释放对象?
如果我会删除不自动释放字典,将所有子去掉吗?
是基于对象的所有权。如果您拥有该对象,则必须释放该对象。
可可设置了以下政策:
你拥有的任何对象创建
您创建使用名称以“黄金”的方法的对象,“新”,“复制”,或“mutableCopy “(例如,alloc,newObject或mutableCopy)。您可以使用retain获取对象的所有权。
当你不再需要它,你必须放弃对象的所有权您拥有
您可以通过发送一个释放消息或一个自动释放消息的放弃对象的所有权。你一定不会放弃对象的所有权,你没有自己的先前的策略规则
这只是推论,明确说明。
在你的情况
NSDictionary *dict = [NSDictionary dictionaryWithObjects....];
NSString *str = [dict objectForKey:@"key"];
你是不是海峡的拥有者,所以你不应该释放该对象。
删除你将不得不作出一个可变对象的特定对象。
大多数目标c的DAT类型mutable
如
NSMutableDictionary,NSMutableArray..etc
然后只需调用.. [yourObject removeObjectatIndex:someInteger]
或[yourObject RemoveAllObjects]
删除对象。
Releasing
或auto releasing
对象是完全不同的thing..it还将释放出整个对象(Dict..array..etc)走的是记忆..
你是什么意思“删除”?假设你的意思的dealloc或免费
str
由dict
保留,如果你没有它叫retain
比你不应该调用它release
。
,你应该从未调用dealloc
任何对象
NSDictionary *dict = [NSDictionary dictionaryWithObjects....];
dict
是意味着它将在下次运行循环被释放,如果你没有保留任何地方
一切都在dict
由它保留,因此他们不会被释放,直到dict
被释放
如果呼叫没有结束retain
,copy
或mutableCopy
,alloc
或new
你不能使用release
或autorelease
。该对象已经自动发布。
NSString *str = [[NSString alloc] initWithString:@"123"]; <- needs release
NSString *str = [aString copy]; <- release
NSString *str = [aString mutableCopy]; <- release
NSString *str = [aString retain]; <- release
NSString *str = [NSString new]; <- release
everything else <- don't release.
只有一个有效使用dealloc
。这是在您的- (void)dealloc
方法。
如果字典被释放它包含所有得到释放的对象和键。如果他们没有保留在别的地方,他们也会被释放。
有大量可用的内存容量管理文档。例如苹果的目标C Advanced Memory Management Programming Guide