NSArrayによって生成されたコンパイル時に不確定なサイズのループ内でテキストが実行され、かなり速く返される単純なシェルコマンドを実行しようとしています。 perlのようなスクリプト言語では、私は次のようなことをすることができます:Objective-Cでループ内でNSTaskを実行しています
for(i=0;i<=$myinputarraysize;i++){
$output[i]=`/my/task $inputarray[i]`;
}
これは私の仕事の予想される出力から私のための新しい配列を構築するでしょう。 Obj-Cでは、これははるかに難しく、少し混乱するようです。今、私のループは次のようになります。
for(int i=0; i<[inputarray count]; i++){
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath:nsdchat];
NSArray *args;
args = [NSArray arrayWithObjects:@"/my/task", [inputarray objectAtIndex:i], nil];
[task setArguments:args];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput:pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *desc;
desc = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
desc = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
[descriptions insertObject:desc atIndex:i];
[task release];
[args release];
[pipe release];
[file release];
[data release];
}
私の目標は、私は常に文字列である知っている私のタスクからの出力との記述(NSMutableArrayのを)(埋めることで、常に私がストリップたい改行で終わりますでる)。私はこれを実行し、出力をNSLogにすると、ループのカウント全体で同じ結果が得られるので、メモリの解放に関する何かが不足しているようです。
このような単純なタスクをループする方法はありますか。私はそれを自分のために過度に複製していますか?
私は混乱しています - ログには何が印刷されていますか?これはうまくいくはずです。 –