По-видимому, это проблема типа:
Внутри других методов init вы вызываете [self initWithArray:...]
.self
набирается как G2Matrix*
.В этом контексте компилятор может полностью определить, какой imp
(указатель на функцию C) будет в конечном итоге обрабатывать вызов метода, и правильно определять его сигнатуру (типы аргумента и возвращаемого значения).
Out в обычном коде, [G2Matrix alloc]
возвращает id
.В этом контексте компилятор может сообщать только селектор метода, который будет связан с imp
во время выполнения.Он должен угадать, какой initWithArray:
вы имеете в виду, и, как вы можете видеть из предупреждения, он угадывает неправильно, поскольку базовый класс имеет метод initWithArray:
с другой сигнатурой.Ваш код все еще работает, компилятор просто не может быть уверен.
Выбор уникального имени для initMethod (initWithFloats:
может быть?) - рекомендуемый способ закрыть предупреждение.Другими способами являются: разбить его на две строки;или приведите возвращаемое значение alloc к нужному классу:
G2Matrix *matrix = [G2Matrix alloc];
matrix = [[matrix initWithArray:pointerToFloats] autorelease];
// or
G2Matrix* matrix = [[(G2Matrix *)[G2Matrix alloc] initWithArray:m] autorelease];
Выглядит немного странно, но позволяет вам снова включить флаг компилятора лечить предупреждения-ошибки.