Re: argument checks
Re: argument checks
- Subject: Re: argument checks
- From: Chris Suter <email@hidden>
- Date: Thu, 12 Jun 2008 17:47:40 +1000
On 12/06/2008, at 5:29 PM, Graham Cox wrote:
On 12 Jun 2008, at 5:03 pm, Chris Suter wrote:
In the original example, myNum was being passed as a argument
rather than having a message to sent to it and it’s often not safe
to pass nil objects as arguments.
Hmmm... well, what's the function it's passed to going to do with
it, other than call a method on it?
If it's doing anything else, it's breaking other (much stronger)
rules. If it tries to access its ivars directly, that's breaking
encapsulation. If it tried to release it, that breaks memory
management rules... etc. So I think in general it's quite safe to
pass nil arguments where an object is expected - I certainly do it
all the time, and haven't found any real problem with that so far.
Contractually, nil is defined as type id, and type id can be passed
for any object type, so this is not even a hack - it's entirely
permitted by design. NULL on the other hand, is another story.
Code that does not allow a nil argument should assert that. If it
doesn't it is implicitly allowing nil, unless it is specifically
documented otherwise.
Can you give me a counter-example?
Let’s say the function your calling uses one of the following:
-[NSDictionary setObject:forKey:]
-[NSMutableArray addObject:]
+[NSDictionary dictionaryWithObjectsAndKeys:Object1, Key1,
ObjectThatIsNil, Key2, Object3, Key3, nil]
The first two raise exceptions if you pass in nil. The last example
probably doesn't do what you expected. I'm sure there are more
examples; that’s just three and I’ve encountered all three of them.
- Chris
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden