Skip navigation.
 
mlRe: Trying to understand -- please help...
FROM : Ken Thomases
DATE : Wed May 21 23:28:54 2008

On May 21, 2008, at 1:35 PM, Johnny Lundy wrote:

> All it would take is a single sentence under the "Class Methods" 
> header, to say that these methods autorelease the returned object 
> (AND that such autoreleasing means that the object will be 
> deallocated if the method in which it was created returns).


A big part of the reason that such a sentence isn't there is that it 
isn't (always) accurate!

The contract of the convenience constructor only has two components: 
1) it's not yours to release (unless you retain it, of course); and 2) 
the lifetime lasts _at_least_ until the enclosing autorelease pool is 
drained.

There's no promise that the object is autoreleased.  There's no 
promise that it will be deallocated if you neglect to retain it.  It's 
also just inaccurate that autoreleased objects "will be deallocated if 
the method in which it was created returns".  The current method can 
return and the object won't be deallocated.  It's only once you return 
back to the framework that it _may_ be deallocated.

On the other hand, it might be a singleton (probable for something 
like [NSArray array]).  It might be owned by some other object and 
have a lifetime longer than the autorelease pool.  Etc.

Anything promised by the contract is just that -- a promise.  It ties 
Apple's hands regarding the way the framework may be implemented now 
and for all time.  So, it's in everybody's interest that the docs only 
promise the minimum that is required for the framework to be useful, 
leaving Apple substantial freedom to change the implementation behind 
the scenes.

I continue to find it odd that anybody would expect to go straight to 
the NSArray class reference, bypassing the introductory material about 
basic memory management patterns used by the framework.  Now, I can 
readily imagine that people will read that material but not fully 
absorb or grok it on the first (or second) pass through.  We've all 
been there.  But if you later find yourself confused about memory 
management, hopefully you at least remember that it was discussed in 
one of the introductory documents and you'll go looking for it.  (I'm 
not saying that asking the list is wrong; it's not, but it's also not 
a sign that the docs are lousy.)

Cheers,
Ken

Related mailsAuthorDate
mlTrying to understand -- please help... john darnell May 21, 18:05
mlRe: Trying to understand -- please help... Torsten Curdt May 21, 18:13
mlRe: Trying to understand -- please help... Vijay Malhan May 21, 18:16
mlRe: Trying to understand -- please help... Paul Bailey May 21, 18:20
mlRe: Trying to understand -- please help... Hank Heijink (Mail… May 21, 18:28
mlRe: Trying to understand -- please help... João Pavão May 21, 18:29
mlRe: Trying to understand -- please help... Gérard Iglesias May 21, 18:34
mlRE: Trying to understand -- please help... john darnell May 21, 18:41
mlTrying to understand -- please help... Peter Hudson May 21, 18:47
mlRe: Trying to understand -- please help... Gérard Iglesias May 21, 18:49
mlRe: Trying to understand -- please help... Clark Cox May 21, 19:03
mlRe: Trying to understand -- please help... Gérard Iglesias May 21, 19:11
mlRe: Trying to understand -- please help... Shawn Erickson May 21, 19:17
mlRe: Trying to understand -- please help... Bill Bumgarner May 21, 19:21
mlRe: Trying to understand -- please help... Hank Heijink (Mail… May 21, 19:25
mlRe: Trying to understand -- please help... Shawn Erickson May 21, 19:32
mlRe: Trying to understand -- please help... Sherm Pendley May 21, 19:36
mlRe: Trying to understand -- please help... Shawn Erickson May 21, 19:38
mlRe: Trying to understand -- please help... Ilan Volow May 21, 19:40
mlRe: Trying to understand -- please help... I. Savant May 21, 20:05
mlRe: Trying to understand -- please help... I. Savant May 21, 20:07
mlTrying to understand -- please help... Johnny Lundy May 21, 20:35
mlRe: Trying to understand -- please help... Shawn Erickson May 21, 20:45
mlRe: Trying to understand -- please help... Vijay Malhan May 21, 20:47
mlRe: Trying to understand -- please help... Bill Bumgarner May 21, 20:48
mlRe: Trying to understand -- please help... Shawn Erickson May 21, 20:54
mlRe: Trying to understand -- please help... I. Savant May 21, 20:57
mlRe: Trying to understand -- please help... Shawn Erickson May 21, 21:00
mlRe: Trying to understand -- please help... I. Savant May 21, 21:00
ml+initialize (was Re: Trying to understand -- please help...) Jason Stephenson May 21, 21:00
mlRe: Trying to understand -- please help... Michael Vannorsdel May 21, 21:07
mlRe: Trying to understand -- please help... Ilan Volow May 21, 21:08
mlRe: Trying to understand -- please help... Vijay Malhan May 21, 21:14
mlRe: Trying to understand -- please help... Shawn Erickson May 21, 21:24
mlTrying to understand -- please help... Johnny Lundy May 21, 21:37
mlRe: Trying to understand -- please help... Andy Lee May 21, 21:41
mlRe: Trying to understand -- please help... Jeff LaMarche May 21, 21:58
mlRe: Trying to understand -- please help... Sherm Pendley May 21, 22:07
mlRe: Trying to understand -- please help... Sherm Pendley May 21, 22:20
mlRe: Trying to understand -- please help... Uli Kusterer May 21, 22:33
mlRe: Trying to understand -- please help... Sherm Pendley May 21, 22:37
mlRe: Trying to understand -- please help... Uli Kusterer May 21, 22:45
mlRe: Trying to understand -- please help... Sherm Pendley May 21, 22:52
mlRe: Trying to understand -- please help... Christopher Nebel May 21, 23:06
mlRe: Trying to understand -- please help... Hamish Allan May 21, 23:09
mlRe: Trying to understand -- please help... Sherm Pendley May 21, 23:15
mlRe: Trying to understand -- please help... Ken Thomases May 21, 23:28
mlRe: Trying to understand -- please help... Sherm Pendley May 21, 23:29
mlRe: Trying to understand -- please help... Andy Lee May 22, 01:18
mlRe: Trying to understand -- please help... Jens Alfke May 22, 04:23
mlRe: Trying to understand -- please help... Jens Alfke May 22, 04:30
mlRe: Trying to understand -- please help... Jens Alfke May 22, 04:37
mlRe: Trying to understand -- please help... Michael Vannorsdel May 22, 04:55
mlRE: Trying to understand -- please help... Caleb Strockbine May 22, 16:27
mlRe: Trying to understand -- please help... Greg Titus May 22, 17:43
mlRe: Trying to understand -- please help... glenn andreas May 22, 18:25
mlRe: Trying to understand -- please help... Andy Lee May 22, 22:08
mlRe: Trying to understand -- please help... Andy Lee May 22, 22:15
mlRe: Trying to understand -- please help... Joseph Kelly May 22, 22:16
mlRe: Trying to understand -- please help... Johnny Lundy May 22, 23:13
mlRe: Trying to understand -- please help... glenn andreas May 22, 23:42
mlRe: Trying to understand -- please help... Sherm Pendley May 22, 23:59
mlRe: Trying to understand -- please help... Andy Lee May 23, 00:02