On 19 Nov 2010, at 02:51, Ken Thomases wrote: >> > > You don't need to implement the getter. The Cocoa docs are very clear that > callers must respect the declared type of properties (i.e. return type of > getters). That is, if the getter is declared to return an immutable NSArray, > then callers must not interrogate the returned object to determine if it's > really mutable nor invoke mutation methods on it. It may be, and often is > (even in framework classes), that such a method returns an object that is, in > fact, an NSMutableArray. That's an irrelevant implementation detail. >
I agree that the Cocoa frameworks often returns a mutable class in place of an immutable. Wether its irrelevant or not is another matter. If I receive an NSArray instance from a method I can for example identify the index of a particular object within the array, say at idx, safe in the knowledge that my object is at the given index. If however the object I receive is an NSMutableArray instance then the assumption is false as the array may get mutated beneath me. That is unless it can be relied upon that the NSMutableArray instance won't get mutated. From what I recall this behaviour as exhibited in the frameworks is to there, among other reasons, to overcome the necessity of returning copies. This has been discussed here (and in the comments below): http://www.cocoabuilder.com/archive/cocoa/224795-nsdictionary-mutability-test.html#224823 quoting from the above link: As has been noted, the AppKit/Foundation APIs are written such that a method declared as returning (NSDictionary*) will not have said dictionary modified after the fact. Writing code that detects mutability and then mutates, if possible, would violate this contract and will cause unpredictable, potentially crashy, behavior. IFIRC NSTextView -string returns an NSMutableString subclass - NSBigMutableString. This does however get mutated as the NSTextView content changes. This is noted in the docs. Regards Jonathan Mitchell Developer Mugginsoft LLP http://www.mugginsoft.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com