2010-12-04 21 views
0

私は初心者の目的のcの開発者(iphoneの開発のための)と私はメモリ管理についての質問があります。 私のコードはちょうど下にあります。客観的なcメモリ管理

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

私はallocから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が編集され、次にプロパティが追加されてretainが発生するからです。

しかし、あなたはまた、単に行うことができます:すべての

model.username = @"ysnky"; 
-1

まず、あなたのコードをラップするコードタグを使用してください。

のようなものです:

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

は非常に落胆しているあなたはisntead使用することができます。

model.username = @ "ysnky" この場合

あなたが心配する必要はありませんオブジェクトの解放。

しかし、あなたは

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

を使用したい場合は、あなたの質問への回答はNOです。あなたは、最良のあなたのクラスを設計するために、最終的

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

私はあなたにお勧め:あなたは

[model.username release] 

を呼び出すようにしたり、コードが間違っているよりprecisousである必要はありません、あなたのような何かをしなければなりません

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

[model.username release]がないと、書かれたコードが漏れることがあります。 –

+0

あなたは1行下を読むと私は理由がわからない理由を説明します[model.username release] –

+0

私はまだ混乱しています。はい、もしくは、いいえ?私はmodel.username = @ "ysnky"のような使い方を知っていますが、もし私がallocを使うならば、そのコンセプトを知りたいだけです。私のアプリケーションでは文字列オブジェクトではないので、isはカスタムオブジェクトです。 – ysnky