1

ファクトリ メソッドで割り当てているメモリに興味があります。アイデアは、ファイルを読み込み、解析されていない単一の CSV 行をファクトリ メソッドに送信してオブジェクトをインスタンス化することです。

-(id)initWithCSV:(NSString *)csv
{
    if(self = [super init])
    {
        NSArray *values = [csv componentsSeparatedByString:@","];
        self.city = [values[0] stringByTrimmingCharactersInSet:
            [NSCharacterSet whitespaceCharacterSet]];
        self.country = [values[1] stringByTrimmingCharactersInSet:
            [NSCharacterSet whitespaceCharacterSet]];
        self.latitude = [values[2] doubleValue];
        self.longitude = [values[3] doubleValue];
    }
    return self;
}

私の最初の質問は、これはメモリ管理についてどうですか? ARCがどのように機能するかについては完全にはわかりません。valuesメソッドを終了するとすぐに配列が破棄されますよreturn self;ね?

2 番目の質問...ここでやろうとしていることを達成するためのより効率的な方法はありますか?

4

3 に答える 3

2

最初の質問に関して:

この場合、ARC は実際には違いを生みません。メソッドは既に自動解放されたオブジェクトを返し、そのcommentsSeparatedByString:保持カウントを増やしていない (または ARC 用語では、強い参照を作成していない) ため、メソッドが戻ると自動的にクリーンアップされます。

効率に関しては、一連の文字列で配列を作成する代わりに、NSScanner を使用して各コンマまでスキャンすることで、メモリを節約できる可能性があります。しかし、これは比較的短いストリングのほんの一部にすぎないため、実際には問題になりません。

于 2013-10-10T23:25:40.063 に答える