From fab399def15cd3f35f9cb51409bade017e5ebe6b Mon Sep 17 00:00:00 2001 From: Wojciech Nagrodzki <278594+wnagrodzki@users.noreply.github.com> Date: Sun, 12 Apr 2015 20:35:07 +0200 Subject: [PATCH] Adds "Object's equality requites three methods to be provided" section. --- Cocoa Programming Guidelines.pdf | Bin 133427 -> 135884 bytes Cocoa Programming Guidelines.tex | 31 +++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Cocoa Programming Guidelines.pdf b/Cocoa Programming Guidelines.pdf index 1334dcbfddf3622016ab3f2b3938a2bc28eb6032..d3d397f968a88446b67a6d84bc3dad80b1c1e995 100644 GIT binary patch delta 14015 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 delta 11485 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 RoE+S|JV+prl!`Rce*u*}^7{Y) diff --git a/Cocoa Programming Guidelines.tex b/Cocoa Programming Guidelines.tex index 963867d..21e813c 100644 --- a/Cocoa Programming Guidelines.tex +++ b/Cocoa Programming Guidelines.tex @@ -724,6 +724,37 @@ static void * const navigationItemKey = (void *)&navigationItemKey; \end{codelisting} +\subsection{Object's equality requites three methods to be provided} + +\inlinecode{isEqualToYourClassName:} provides the actual logic and works only with the instances of receiver's class. Passing an object of any other class triggers the assertion. \inlinecode{isEqual:} works with any object. \inlinecode{hash:} usually XORs the hash values of the properties. + +\begin{codelisting} +- (BOOL)isEqualToPerson:(Person *)person +{ + if (person == nil) return NO; + + NSParameterAssert([object isMemberOfClass:[Person class]]); + + return ((self.name == nil && person.name == nil) || [self.name isEqual:person.name]) && + ((self.weight == nil && person.weight == nil) || [self.weight isEqual:person.weight]) && + ((self.age == nil && person.age == nil) || [self.age isEqual:person.age]); +} + +- (BOOL)isEqual:(id)object +{ + if ([self isMemberOfClass:[object class]]) return [self isEqualToPerson:object]; + return NO; +} + +- (NSUInteger)hash +{ + return self.name.hash ^ self.surname.hash ^ self.age.hash; +} +\end{codelisting} + +If mutable subclass has to be provided, all the occurrences of \inlinecode{isMemberOfClass:} should be replaced with \inlinecode{isKindOfClass:}. + + \section{Concurrency} Recommended reading \href{http://www.objc.io/issue-2/}{Concurrent Programming - objc.io}