Будьте последовательны. Для начала префикс всех переменных вашего экземпляра с подчеркиванием, а не только некоторые из них.
// Change this...
@synthesize window = _window;
@synthesize filenames;
@synthesize arguments;
//...to this
@synthesize window = _window;
@synthesize filenames = _filenames;
@synthesize arguments = _arguments;
Тогда вы больше не сможете это делать:
arguments = [NSMutableArray arrayWithObjects:@"-P", [password stringValue], [output stringValue], nil];
Обратите внимание, что на следующей строке вы делаете это:
[self.arguments addObjectsFromArray:filenames];
Опять же, согласованность в использовании свойств, а не прямой доступ к переменным экземпляра поможет вам избежать подобных ошибок. Поэтому перепишите предыдущую строку, чтобы использовать это свойство, например:
self.arguments = [NSMutableArray arrayWithObjects:@"-P", [password stringValue], [output stringValue], nil];
Компилятор переводит self.arguments = someArg
в [self setArguments:someArg]
. В этом случае метод setter необходим для сохранения объекта, чтобы он не был освобожден, пока ссылка еще сохраняется в переменной экземпляра _arguments
.