Управление памятью Objective-C: я должен выпустить то, что я выделяю? - PullRequest
0 голосов
/ 05 декабря 2010

Я новичок в разработке Objective-C (для разработки для iPhone), и у меня есть вопрос об управлении памятью. мой код чуть ниже;

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

Ответы [ 2 ]

0 голосов
/ 05 декабря 2010

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

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

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

очень не рекомендуется, вы можете использовать isntead:

модель.username = @ "ysnky"

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

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

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

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

[model.username release]

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

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

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

Model1* model = [[Model1 alloc] initWithUsername:@"skdnaodnsa"];
0 голосов
/ 05 декабря 2010

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

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

model.username = @"ysnky";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...