是这类很多内存泄漏的部分

时间:2011-02-23 13:06:09

标签: iphone

我对我的班级感到很困惑。

特别关于内存管理。

请在这里指导我关于NSString Concept的事。

我的班级是。

#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
{
    itinerary_title=@"null";
    itinerary_creator=@"null";
    itinerary_identifiere=@"null";
    itinerary_created=@"null";
    itinerary_modified=@"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];

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

请指导我如何减速此课程以及如何处理所有内存泄漏问题。

请帮帮我

2 个答案:

答案 0 :(得分:0)

问题来自于您不使用该属性但直接访问成员变量的事实。将itinerary_title=xml_value替换为self.itinerary_title=xml_value

顺便说一下,字符串属性通常是(复制)而不是(保留),为什么要在合成时为你创建所有这些方法。

从.h文件和.m文件中删除方法,并将属性设置为

@property (copy) NSString* myString;

答案 1 :(得分:0)

您的代码显示您需要在编写实际程序之前正确获取Cocoa和Objective-C的基础知识。阅读Cocoa FundamentalsOOP 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. 当您通过foo合成名为@synthesize foo的属性时,会自动生成setter setFoo:和getter foo:,因此您不必手动提供。而你错误地使用名字foo:作为二传手!这将完全混淆系统。

  4. NSString(或一般来说,Objective-C中的任何对象)的nil值不是@"null",而只是nil。并且系统会自动将ivars设置为nil,因此您在初始化方法中并没有真正这样做。