when developing for long-term use, you want to use APIs that aren’t likely to be removed soon, a.k.a. „deprecated“.
So, don’t use downward compatible calls below a point you really aim for.
XCode helps with compiler warnings about „deprecated“ calls – if „Project -> Edit Project Settings -> GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS“ is set:
But be careful, this complains e.g. here only once while
initWithFrame: is also deprecated (compiling for iPhone OS 3.0):
As Kevin Ballard pointed out at Stackoverflow, this is because
[AnyClass alloc] returns a type
id – which doesn’t know about it’s interface.
To get this kind of compiler warnings, you have to type-cast the
[AnyClass alloc] like this:
[(AnyClass*)[AnyClass alloc] initXY];
Maybe time for a macro?
The macro could look like
// http://blog.mro.name/2010/06/xcode-missing-deprecated-warnings/ #define alloc(c) ((c*)[c alloc])
Migrate your codebase via XCode „Edit -> Find in Project“ with search pattern
\[\s*([^\[\]]+)\s+alloc\s*\] and replacement pattern