2

Cocoa の文字列のメモリ特性をよりよく理解するための助けが必要です。私が使用しているアプリは、1 つのビュー コントローラーと n 個のツール オブジェクトを使用しています。ビュー コントローラーはプログラムの存続期間中存続しますが、ツール オブジェクトは割り当てられて解放されます。

文字列 toolName_ があり、実装で着信ツール オブジェクトを構成するとします。オブジェクトにツール名がない場合は、toolName_ 文字列を @"not set" に設定します。ツールに名前がある場合、文字列をツールの名前に設定したいと思います。

入力値を toolName_ に格納する適切な方法を知りたいのですが、これは割り当てられたオブジェクトである場合もあれば、定数文字列である場合もあります。

-(BOOL)setToolObject: ToolObject: obj{

    ToolObject someObj = nil;
    someObj = [[ToolObject alloc]initWithObject obj];

    if(someObj != nil){

       if(! [someObj.toolName isEqualToString: @""]){

             self->toolName_ = Which method should I use given the above question?
             The last instance may have been a constant string but may not have.
             [self->toolName_ release] (can I send a release message to a constant
             string without causing a problem?) 
             self->toolName = [[NSString alloc]initWithString:someObj.toolName];

              OR

             self->tool name = [NSString stringWithString: someObj.toolName];
             This method is self releasing but I don't own it and I'm still not sure 
             what happens to the constant string if it existed. I think I read it's
             not recommended to use this on member vars.

        }else{

             self->toolName_ = @"not set";
        }

       return YES;           

    }else{

       return NO;
    }

 }

アドバイスをいただければ幸いです。

4

1 に答える 1