Iphone 如何解决在NSObject类中全局声明并在其他地方使用的字符串的内存泄漏问题
在我的iPhone应用程序中,我有一个Iphone 如何解决在NSObject类中全局声明并在其他地方使用的字符串的内存泄漏问题,iphone,objective-c,memory-leaks,instruments,Iphone,Objective C,Memory Leaks,Instruments,在我的iPhone应用程序中,我有一个NSObject类“Contact”,其中我有这样一个字符串 @interface Contact : NSObject @property (nonatomic, retain) NSString *name; 我在其他一些类(在Sqlite方法中)中使用了这个名称字符串,如下所示 Contact *contact = [[[Contact alloc] init] autorelease]; contact.name = [NSStri
NSObject
类“Contact”,其中我有这样一个字符串
@interface Contact : NSObject
@property (nonatomic, retain) NSString *name;
我在其他一些类(在Sqlite方法中)中使用了这个名称字符串,如下所示
Contact *contact = [[[Contact alloc] init] autorelease];
contact.name = [NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 1)];
当我使用仪器运行时,我在内存中有一些警告
contact.name = [NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 1)];
我有这么多这样的漏洞。。如何解决此问题。我看不出您显示的代码有任何错误,除非您没有在
联系人
类中正确实现dealloc
方法
应该是这样的(Contact.m):
我听不出你的评论是什么意思
是的,我用它把它们放在卸货区 如果您所做的只是在视图控制器的
viewDidUnload
方法中释放Contact
对象,那么这还不够
然而,我要借此机会说,几乎所有不是专家的人(以及大多数专家)都应该使用ARC,而不是像这样的手动内存管理
它确实节省了大量耗时的调试练习,如果您的问题是这个
dealloc
问题,然后ARC会为您解决这个问题。您在模型类中实现了dealloc
方法吗?是的,我在unloadyou中使用了它释放它们您需要在联系人
类中添加dealloc方法。+1我想您已经实现了,不过,我仍然使用MRR,实际上我认为如果你理解Objective-C下的内存管理规则,就更容易理解。这也意味着你也可以支持32位Mac运行时……这是一个巨大的if(理解规则)。大多数开发人员大大高估了他们发现此类问题的能力。这也是一个问题,即使是一个优秀的开发人员,也要花多少时间来正确计算引用,并对其进行审核,以及这样做的机会成本。在这段时间里,你能写出多少好的代码,这些代码提供了用户会注意到的特性?我还要补充一点,在内存受限的嵌入式设备上,我认为避免泄漏比在台式机上更重要。。。这是一个问题。
contact.name = [NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 1)];
-(void) dealloc {
[name release];
[super dealloc];
}