2011-08-16 11 views
1

コンテナクラスを作成して1つのツイートを保存しました。それは、単一のツイートである辞書オブジェクトを渡すことによって初期化されます。コンテナクラスのメモリ管理

私はこれらの 'つぶやき'の配列を格納し、テーブルに表示します。

プロジェクトは終了しました。私は現時点ですべてをレビューしており、今後これを行うには良い方法があるのだろうかと思っていました。メモリが正しく処理されていますか。私は文字列メンバを 'copy'で宣言し、後でdeallocで 'release'を使うだけでなく 'nil'に設定します。

私のinit okですか、それとも改善することができますか?

Tweet.h の#import

@interface Tweet : NSObject 
{ 
NSString * _userName; 
NSString * _tweetText; 
NSString * _tweetURL; 
} 

@property (nonatomic, copy) NSString * userName; 
@property (nonatomic, copy) NSString * tweetText; 
@property (nonatomic, copy) NSString * tweetURL; 

- (id) initWithDict:(NSDictionary *)productsDictionary; 

@end 

Tweet.m @implementationツイート

@synthesize userName = _userName; 
@synthesize tweetText = _tweetText; 
@synthesize tweetURL = _tweetURL; 

- (id) initWithDict:(NSDictionary *)productsDictionary 
{ 
NSDictionary *aDict = [productsDictionary objectForKey:@"user"]; 
self.userName = [aDict objectForKey:@"screen_name"]; 
self.tweetText = [productsDictionary objectForKey:@"text"]; 

NSRange match; 
match = [self.tweetText rangeOfString: @"http://"]; 
if (match.location != NSNotFound) 
{ 
    NSString *substring = [self.tweetText substringFromIndex:match.location]; 
    NSRange match2 = [substring rangeOfString: @" "]; 

    if (match2.location == NSNotFound) 
    { 
     self.tweetURL = substring; 
    } 
    else 
    { 
     self.tweetURL = [substring substringToIndex:match2.location]; 
    } 
} 
else 
{ 
    self.tweetURL = nil; 
} 

return self; 
} 

-(void) dealloc 
{ 
[self.tweetText release]; 
[self.tweetURL release]; 
[self.userName release]; 
[super dealloc]; 
} 

@end 

多くのおかげで、一見 コード

答えて

3

、私はここには固有の欠陥を見ません。それはうまく見えます。私がやることを好むだろう:

-(void) dealloc 
{ 
    [_tweetText release]; 
    [_tweetURL release]; 
    [_userName release]; 
    [super dealloc]; 
} 

しかし、あなたがやっていることにも良いです。

+0

こんにちはルディ、入力いただきありがとうございます。私がやったこととあなたの提案との間に何か違うことはありますか?ありがとう、コード –

+0

また、self.tweetText = nil; [self.tweetText release]の代わりにokにしてください。なぜならNSStringオブジェクトは保持するのではなく 'コピー'なのですから?あるいは、私はその仕組みを誤解しています。私は人々が以前にそのようなことをしているのを見ました。 –

+0

Rudyのバージョンは、リリースされるオブジェクトへの参照に直接アクセスします。コードのバージョンは、メソッド呼び出しを通じて参照にアクセスします。ルディのバージョンはもっと速くなければなりません。コンパイラがCodeのバージョンをRudyのように高速に最適化できるかどうかはわかりませんが、それはコンパイラの最適化のためには十分単純です。メソッド呼び出しのアクセスは、アプリユーザーに顕著な違いをもたらすために、多数のオブジェクトを割り当て解除する必要があるほど速いです。 –