Skip navigation.
 
mlRe: Garbage collector vs variable lifetime
FROM : Chris Hanson
DATE : Mon Jun 09 20:39:55 2008

On Jun 9, 2008, at 11:17 AM, Hamish Allan wrote:

> On Mon, Jun 9, 2008 at 7:02 PM, Chris Hanson <<email_removed>> wrote:
>

>> The reason these kinds of methods have a return type of (id) is 
>> that there
>> is no way to say "returns an object of the receiver's class."  For 
>> example,
>> +[NSArray array] returns (id) rather than (NSArray *) because 
>> otherwise
>> +[NSMutableArray array] would require a separate declaration 
>> (NSMutableArray
>> *).  Rather than have a large number of separate declarations, 
>> these methods
>> return (id).

>
> If this is true, it rather contradicts your point, because it should
> be perfectly legal to return an NSMutableArray (a subclass of NSArray)
> from +(NSArray *)array.


It is perfectly legal to return an NSMutableArray from a hypothetical +
(NSArray *)array method.

However, all the sender of that +(NSArray *)array message can know is 
that the result can be treated as an NSArray.  It can't know whether 
an NSArray or NSMutableArray is returned (unless it does extra work, 
like using -isKindOfClass:, which also happens to be fragile).

This is actually used quite often in Cocoa development.  For example, 
if you have an Account class with a "transactions" array property that 
you want to use with Key-Value Observing, you'll probably write its 
interface to look something like this (if you implement all of the 
various KVO methods):

  @interface Account : NSObject {
      NSMutableArray *transactions;
  }

  - (NSArray *)transactions;
  - (void)setTransactions:(NSArray *)newTransactions;

  - (void)insertObject:(id)object inTransactionsAtIndex:
(NSUInteger)index;
  - (void)removeObjectFromTransactionsAtIndex:(NSUInteger)index;

  @end

All of these methods would actually be implemented to return or 
manipulate the NSMutableArray instance variable.

  -- Chris

Related mailsAuthorDate
mlGarbage collector vs variable lifetime Quincey Morris Jun 7, 00:23
mlRe: Garbage collector vs variable lifetime Bill Bumgarner Jun 7, 00:48
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 7, 01:18
mlRe: Garbage collector vs variable lifetime Ricky Sharp Jun 7, 01:24
mlRe: Garbage collector vs variable lifetime Quincey Morris Jun 7, 01:27
mlRe: Garbage collector vs variable lifetime Nick Zitzmann Jun 7, 01:30
mlRe: Garbage collector vs variable lifetime Bill Bumgarner Jun 7, 01:31
mlRe: Garbage collector vs variable lifetime Shawn Erickson Jun 7, 01:33
mlRe: Garbage collector vs variable lifetime Bill Bumgarner Jun 7, 01:42
mlRe: Garbage collector vs variable lifetime Clark Cox Jun 7, 01:55
mlRe: Garbage collector vs variable lifetime Ricky Sharp Jun 7, 02:05
mlRe: Garbage collector vs variable lifetime Quincey Morris Jun 7, 02:36
mlRe: Garbage collector vs variable lifetime George Stuart Jun 7, 02:51
mlRe: Garbage collector vs variable lifetime Antonio Nunes Jun 7, 05:48
mlRe: Garbage collector vs variable lifetime Bill Bumgarner Jun 7, 05:49
mlRe: Garbage collector vs variable lifetime Ken Thomases Jun 7, 06:16
mlRe: Garbage collector vs variable lifetime Bill Bumgarner Jun 7, 07:03
mlRe: Garbage collector vs variable lifetime Antonio Nunes Jun 7, 09:07
mlRe: Garbage collector vs variable lifetime Quincey Morris Jun 7, 10:32
mlRe: Garbage collector vs variable lifetime Quincey Morris Jun 7, 10:41
mlRe: Garbage collector vs variable lifetime Ken Thomases Jun 7, 13:13
mlRe: Garbage collector vs variable lifetime Ken Thomases Jun 7, 13:14
mlRe: Garbage collector vs variable lifetime Michael Ash Jun 7, 13:34
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 7, 14:29
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 7, 14:35
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 7, 14:47
mlRe: Garbage collector vs variable lifetime Michael Ash Jun 7, 15:18
mlRe: Garbage collector vs variable lifetime Ricky Sharp Jun 7, 15:59
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 7, 16:31
mlRe: Garbage collector vs variable lifetime John Engelhart Jun 7, 17:03
mlRe: Garbage collector vs variable lifetime Quincey Morris Jun 7, 20:19
mlRe: Garbage collector vs variable lifetime Michael Ash Jun 7, 20:30
mlRe: Garbage collector vs variable lifetime Peter Duniho Jun 7, 20:34
mlRe: Garbage collector vs variable lifetime Michael Ash Jun 7, 20:35
mlRe: Garbage collector vs variable lifetime Michael Ash Jun 7, 20:45
mlRe: Garbage collector vs variable lifetime Jean-Daniel Dupas Jun 7, 21:07
mlRe: Garbage collector vs variable lifetime Ricky Sharp Jun 7, 21:43
mlRe: Garbage collector vs variable lifetime Ricky Sharp Jun 7, 21:43
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 8, 00:24
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 8, 00:37
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 8, 00:51
mlRe: Garbage collector vs variable lifetime Chris Hanson Jun 8, 01:11
mlRe: Garbage collector vs variable lifetime Peter Duniho Jun 8, 02:15
mlRe: Garbage collector vs variable lifetime Bill Bumgarner Jun 8, 02:23
mlRe: Garbage collector vs variable lifetime Michael Ash Jun 8, 04:10
mlRe: Garbage collector vs variable lifetime Quincey Morris Jun 8, 08:24
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 8, 09:40
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 8, 09:47
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 8, 10:05
mlRe: Garbage collector vs variable lifetime Paul Sargent Jun 8, 12:23
mlRe: Garbage collector vs variable lifetime Chris Kane Jun 9, 01:53
mlRe: Garbage collector vs variable lifetime John Engelhart Jun 9, 02:39
mlRe: Garbage collector vs variable lifetime Chris Hanson Jun 9, 05:48
mlRe: Garbage collector vs variable lifetime Peter Duniho Jun 9, 07:55
mlRe: Garbage collector vs variable lifetime John Engelhart Jun 9, 09:56
mlRe: Garbage collector vs variable lifetime Jean-Daniel Dupas Jun 9, 10:11
mlRe: Garbage collector vs variable lifetime Chris Hanson Jun 9, 12:33
mlRe: Garbage collector vs variable lifetime Chris Hanson Jun 9, 12:51
mlRe: Garbage collector vs variable lifetime Antonio Nunes Jun 9, 13:54
mlRe: Garbage collector vs variable lifetime Charles Srstka Jun 9, 18:37
mlRe: Garbage collector vs variable lifetime John Engelhart Jun 9, 19:24
mlRe: Garbage collector vs variable lifetime Chris Hanson Jun 9, 20:02
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 9, 20:17
mlRe: Garbage collector vs variable lifetime Chris Hanson Jun 9, 20:39
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 10, 00:55
mlRe: Garbage collector vs variable lifetime Charles Srstka Jun 10, 17:19
mlRe: Garbage collector vs variable lifetime Charles Srstka Jun 10, 17:28
mlRe: Garbage collector vs variable lifetime Adam R. Maxwell Jun 10, 18:18
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 10, 22:17
mlRe: Garbage collector vs variable lifetime John Engelhart Jun 11, 09:01
mlRe: Garbage collector vs variable lifetime Chris Hanson Jun 11, 09:15
mlRe: Garbage collector vs variable lifetime Jim Puls Jun 11, 09:29
mlRe: Garbage collector vs variable lifetime Graham Cox Jun 11, 09:35
mlRe: Garbage collector vs variable lifetime Jean-Daniel Dupas Jun 11, 09:41
mlRe: Garbage collector vs variable lifetime Hamish Allan Jun 11, 11:06
mlRe: Garbage collector vs variable lifetime Andy Lee Jun 11, 14:42
mlRe: Garbage collector vs variable lifetime Charles Srstka Jun 11, 16:55
mlRe: Garbage collector vs variable lifetime Clark Cox Jun 11, 17:45
mlRe: Garbage collector vs variable lifetime j o a r Jun 11, 17:49
ml[moderator] Re: Garbage collector vs variable lifetime Scott Anguish Jun 11, 17:51