More Coding Nits
I’m looking at a project on GitHub. I’m not going to name it, because it’s not my thing to embarass anyone.
But I’ll take the opportunity to point out some things I noticed.
-
Accessors shouldn’t be of the form
getSomething. Drop theget. -
#define SOME_CONSTANT 10isn’t Cocoa-like. Better isstatic const NSUInteger PBSSomeConstant = 10;(Where PBS is replaced with your prefix.) -
If you’re calling something a Handle, it should be an actual Mac memory Handle. And we shouldn’t be using Handles anymore.
-
All of your class names should have a prefix. All of them.
-
Header files should expose only what’s needed by the outside world. Use class extensions to keep private things private.
-
If you’re jumping through hoops to create a cancelable block, consider an
NSOperationinstead. OrperformSelector:withObject:afterDelay:combined withcancelPreviousPerformRequestsWithTarget:selector:object:. Or an NSTimer. -
Don’t over-comment. No need to say a line is creating a
UILabel, for instance, when it’s obvious. Comments are for illumination and are sometimes necessary — but, in general, you should write code that needs no illumination. -
The
initmethod should returninstancetypeand not anything else. (Oridif you’re supporting older OSes.) -
You shouldn’t use self.whatever accessors in
init, except when unavoidable. Use _whatever instead. (Same thing indeallocand in custom accessors.) -
Turn on more errors and warnings. (Even consider treat-warnings-as-errors.) Peter Hosey’s list is good. It makes your code better — and it means that if someone else uses your code they don’t have to go through and fix things.
-
If your code is meant for iOS 7 or Mac OS 10.9, use @import.
-
If you register for notifications, and there’s any code path where you might not call
removeObserver, fix it.
My point, by the way, is not to make anyone afraid of releasing their code. Don’t be afraid — releasing code is a great thing to do.
I’ve released dumb stuff sometimes. Totally idiotic things. It’s fine. The point is to learn and get better. That’s it.