2010-12-04 2 views
0

i новичок, разработчик объекта c (для разработки iphone), и у меня есть вопрос об управлении памятью. мой код находится чуть ниже;Цель c управление памятью

Model1* model = [[Model1 alloc] init]; 
model.username = [[NSString alloc] initWithString:@"ysnky"]; 
[model.username release]; // is it needed 

Мне нужно освободить model.username с тех пор, как я выделил? благодаря ...

Model1.h

@interface Model1 : NSObject { 
    NSString* username; 
} 
@property (nonatomic, retain) NSString* username; 
@end 

Model1.m

@implementation Model1 
@synthesize username; 

-(void) dealloc { 
    [username release]; 
    [super dealloc]; 
} 
@end 

ответ

0

С кодом, как вы написали это, да, вы должны освободить эту строку потому что, как вы заметили, это строка, которую вы вывели alloc/init 'ed, а затем свойство вызывает дополнительный retain.

Но вы можете просто сделать:

model.username = @"ysnky"; 
-1

Прежде всего, пожалуйста, используйте код тега, чтобы обернуть ваш код.

сделать что-то вроде:

model.username = [[NSString alloc] initWithString:@"ysnky"]; 

очень расстраивайтесь вы можете использовать isntead:

model.username = @ "ysnky"

в этом случае вам не придется беспокоиться о освобождение объекта.

Но если вы хотите использовать

model.username = [[NSString alloc] initWithString:@"ysnky"]; 

ответ на ваш вопрос НЕТ. Вам не нужно звонить

[model.username release] 

или более precisous ваш код не так, вы должны сделать что-то вроде:

Model1* model = [[Model1 alloc] init]; 
NSString *tmpString = [[NSString alloc] initWithString:@"ysnky"] 
model.username = tmpString; 
[tmpString release]; 

, наконец, я предлагаю вам лучше создать свой класс, вы может сделать лучше, выполнив инициализатор, например:

Model1* model = [[Model1 alloc] initWithUsername:@"skdnaodnsa"]; 
+0

Без [название модели.сумма] код, указанный в тексте, будет течь. – 2010-12-04 21:30:33

Смежные вопросы