Calling -init multiple times in Objective-C
What happens when you call -init multiple times o开发者_运维知识库n one object, are there some hidden side effects? Can you assume that no additional memory is allocated? Would anything go against such an idea?
Calling -init
multiple times is undefined, unsupported, and will lead to bugs, crashes, and other unexpected behavior.
Many classes -- NSString
, NSArray
, and NSDictionary
, for example -- don't actually allocate anything when the +alloc
method is called. It isn't until one of the various -init*
methods are called that the object has enough context to figure out the most efficient means of doing whatever you ask.
One thing I'd add to Bill's answer is that when writing your own -init
methods, code defensively and don't assume that they'll only be invoked once.
精彩评论