2011-02-23 33 views
0

我对我的课非常困惑。是这个类内存的很多部分泄漏

特别关于内存管理。

请在这里引导我关于NSString概念。

我的班级是。

#import <Foundation/Foundation.h> 


@interface itinerary_detail : NSObject { 
    NSString *itinerary_title; 
    NSString *itinerary_creator; 
    NSString *itinerary_identifiere; 

    NSString *itinerary_created; 
    NSString *itinerary_modified;  
} 
@property (retain) NSString *itinerary_title; 
@property (retain) NSString *itinerary_creator; 
@property (retain) NSString *itinerary_identifiere; 
@property (retain) NSString *itinerary_created; 
@property (retain) NSString *itinerary_modified; 

-(void) itinerary_initialization; 
-(void) itinerary_title:(NSString *) xml_value; 
-(void) itinerary_creator:(NSString *) xml_value; 
-(void) itinerary_identifiere:(NSString *) xml_value; 
-(void) itinerary_created:(NSString *) xml_value; 
-(void) itinerary_modified:(NSString *) xml_value; 
@end 

和我的.m类是

#import "itinerary_detail.h" 
@implementation itinerary_detail 
@synthesize itinerary_title,itinerary_creator,itinerary_identifiere,itinerary_created,itinerary_modified; 
-(void) itinerary_initialization 
{ 
    [email protected]"null"; 
    [email protected]"null"; 
    [email protected]"null"; 
    [email protected]"null"; 
    [email protected]"null"; 
} 

-(void) itinerary_title:(NSString *) xml_value 
{ 
    itinerary_title=xml_value; 
} 
-(void) itinerary_creator:(NSString *) xml_value 
{ 
    itinerary_creator=xml_value; 
} 
-(void) itinerary_identifiere:(NSString *) xml_value 
{ 
    itinerary_identifiere=xml_value; 
} 
-(void) itinerary_created:(NSString *) xml_value 
{ 
    itinerary_created=xml_value; 
} 
-(void) itinerary_modified:(NSString *) xml_value 
{ 
    itinerary_modified=xml_value; 
} 
-(void) dealloc 
{ 
    [itinerary_title release]; 
    [itinerary_creator release]; 
    [itinerary_identifiere release]; 
    [itinerary_created release]; 
    [itinerary_modified release]; 
    [super dealloc]; 
} 
@end 

我约的问题。

1-是这种类型减少这类内存泄漏问题中的NSString。如果是的请我如何改变这一点。

2 - 我使用这个类为 其他类就像那个

itinerary_detail *check=[[itinerary_detail alloc] init]; 
[check itinerary_initialization]; 
[check release]; 

我的问题是正确的方式。或者这也是一个内存泄漏问题。

请指导我如何减速这个类和如何处理所有内存泄漏问题。

请帮我

+0

穆克什你好,请学会正确格式化的问题。现在我会编辑它们,以便您可以看到它是如何完成的! – Yuji 2011-02-23 13:09:33

+0

你能修复一下语法吗?当你要申报时很难减速。 – futureelite7 2011-02-23 13:54:32

回答

0

来自于事实,你不使用属性,而是直接访问成员变量的问题。替换itinerary_title=xml_valueself.itinerary_title=xml_value

btw,字符串属性通常是(复制)而不是(保留),为什么你创建所有这些方法,而合成将为你做。

从.h文件和.m文件删除的方法和设置属性为

@property (copy) NSString* myString; 
0

您的代码表明,你需要得到可可的基础知识和Objective-C正确,写作前一个实际的节目。阅读Cocoa Fundamentals,OOP with Objective-C等。抵制现在开始编写程序的冲动;你花时间学习基础知识将大大减少你后来的头痛。

您的代码应该是这样的:

@interface ItineraryDetail : NSObject { 
    NSString *itineraryTitle; 
    ... 
} 
@property (retain) NSString *itineraryTitle; 
@end 

@implementation ItineraryDetail 
@synthesize itineraryTitle, ... ; 

-(id)init{ 
    self=[super init]; 
    if(self){ 
     itineraryTitle=nil; 
    } 
    return self; 
} 
-(void) dealloc 
{ 
    [itineraryTitle release]; 
    [super dealloc]; 
} 
@end 

ItineraryDetail *check=[[ItineraryDetail alloc] init]; 
    ... use it ... 
[check release]; 

的几点:

  1. 在Objective-C中,您通常不会使用name_like_this。你NameLikeThis。这不是一个绝对的规则,但它是习惯,你应该遵循它的一般。

  2. 您不要单独编写像...Initialize这样的方法。相反,它使用init,其中[super init]在其中。

  3. 当你合成了一个名为通过@synthesize foofoo财产,二传手setFoo:和吸气foo:是自动生成的,所以您不必手动提供给他们。而你错误地使用了名字foo:作为二传手!这将完全混淆该系统。

  4. NSString(或Objective-C中的任何对象一般)的零值不是@"null"而只是nil。系统自动将ivars设置为nil,所以在初始化方法中您不会这么做。

+0

必须从'init'返回,并检查'结果 - [超级初始化]'再继续。 – 2011-02-23 13:28:35

+0

你说得对。我将修改它... – Yuji 2011-02-23 13:29:57

+0

亲爱的朋友们,感谢帮助我,对不起,所有我的英语。并再次感谢各位朋友 – 2011-02-23 14:00:10