From a58297881e29777e1a5aec1a97dad0bda5e8b68f Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Sun, 19 Jan 2014 15:20:57 +0100 Subject: [PATCH] Minor update --- Cocoa Programming Guidelines.pdf | Bin 87056 -> 87365 bytes Cocoa Programming Guidelines.tex | 41 ++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/Cocoa Programming Guidelines.pdf b/Cocoa Programming Guidelines.pdf index 6c15ed4956d32ba227f2de5f5f0dca5ad642da0c..469e9c0a1a3750c25657938b309696c8b840dca3 100644 GIT binary patch delta 15554 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 AwEzGB delta 15221 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 diff --git a/Cocoa Programming Guidelines.tex b/Cocoa Programming Guidelines.tex index a03e2aa..9f60f2a 100644 --- a/Cocoa Programming Guidelines.tex +++ b/Cocoa Programming Guidelines.tex @@ -539,21 +539,28 @@ typedef NS_ENUM(NSInteger, Enumeration) { }; \end{codelisting} -It also shields from false positives, when comparing against values returned by methods sent to nil pointer. +It also shields from false positives, when comparing against values returned by methods sent to nil pointer. Let's assume EnumerationInvalid does not exist. \begin{codelisting} -NSError * error; -BOOL valid = [self isUserValid:user error:&error]; -if (valid == NO) { - if(error.code == LoginOrderBlockedErrorCode) { - // assuming error is nil and LoginOrderBlockedErrorCode is equal to 0 - } -} +@interface MyObject : NSObject + +@property (assign, nonatomic) Enumeration enumeration; + +@end \end{codelisting} -\begin{importantlisting} -Always check error domain before checking error code. -\end{importantlisting} +If myObject pointer is nil, performActionA method is called, and it may not be expected. + +\begin{codelisting} +MyObject * myObject = ... + +if (myObject.enumeration == EnumerationA) + [self performActionA]; +else if (myObject.enumeration == EnumerationB) + [self performActionB]; +else + [self performActionC]; +\end{codelisting} \subsection{The highest level of abstraction is used by default} @@ -604,13 +611,17 @@ Creating object on demand reduces initialization time of containing class. \end{codelisting} -\subsection{Object registers itself as an observer} +\subsection{Object does not register others objects as observers} + +Object registers itself as an observer. + +\begin{codelisting} +[obj addObserver:self forKeyPath:@"isExecuting" options:NSKeyValueObservingOptionNew context:NULL]; +\end{codelisting} Unregistering follows the same rule. \begin{codelisting} -[obj addObserver:self forKeyPath:@"isExecuting" options:NSKeyValueObservingOptionNew context:NULL]; -... [obj removeObserver:self forKeyPath:@"isExecuting" context:NULL]; \end{codelisting} @@ -631,7 +642,7 @@ NSError object is used only for providing additional information about the failu - (BOOL)writeToURL:(NSURL *)aURL options:(NSDataWritingOptions)mask error:(NSError **)errorPtr \end{codelisting} -Therefore you should always check that the return value is nil or NO before attempting to do anything with the NSError object. +Therefore you should always check that the return value is nil or NO before attempting to do anything with the NSError object. Similarly you ought to check error domain before checking error code. \subsection{Custom error belong to error domain}