我对我的班级感到很困惑。
特别关于内存管理。
请在这里指导我关于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];
我的问题是正确的。或者这也是内存泄漏问题。
请指导我如何减速此课程以及如何处理所有内存泄漏问题。
请帮帮我
答案 0 :(得分:0)
问题来自于您不使用该属性但直接访问成员变量的事实。将itinerary_title=xml_value
替换为self.itinerary_title=xml_value
从.h文件和.m文件中删除方法,并将属性设置为
@property (copy) NSString* myString;
答案 1 :(得分:0)
您的代码显示您需要在编写实际程序之前正确获取Cocoa和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];
几点:
在Objective-C中,您通常不会name_like_this
。你NameLikeThis
。这不是绝对的规则,但它是习惯性的,你应该遵循它。
您不会单独编写...Initialize
之类的方法。相反,它是使用init
实现的,其中包含[super init]
。
当您通过foo
合成名为@synthesize foo
的属性时,会自动生成setter setFoo:
和getter foo:
,因此您不必手动提供。而你错误地使用名字foo:
作为二传手!这将完全混淆系统。
NSString
(或一般来说,Objective-C中的任何对象)的nil值不是@"null"
,而只是nil
。并且系统会自动将ivars设置为nil
,因此您在初始化方法中并没有真正这样做。