Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何解决在NSObject类中全局声明并在其他地方使用的字符串的内存泄漏问题_Iphone_Objective C_Memory Leaks_Instruments - Fatal编程技术网

Iphone 如何解决在NSObject类中全局声明并在其他地方使用的字符串的内存泄漏问题

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

在我的iPhone应用程序中,我有一个
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];
}