• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
RE: swizzling a class to a subclass inorder to add ivars (& methods) to a class
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: swizzling a class to a subclass inorder to add ivars (& methods) to a class


  • Subject: RE: swizzling a class to a subclass inorder to add ivars (& methods) to a class
  • From: "Michael Latta" <email@hidden>
  • Date: Mon, 30 Oct 2006 08:53:33 -0800

I just reviewed a WWDC session that indicated that poseAsClass: was
deprecated in 10.5 and would be going away.  It may even be removed in 64
bit in 10.5.

Michael


> -----Original Message-----
> From: cocoa-dev-bounces+lattam=email@hidden [mailto:cocoa-dev-
> bounces+lattam=email@hidden] On Behalf Of Mike Abdullah
> Sent: Monday, October 30, 2006 12:55 AM
> To: Scott Morrison
> Cc: email@hidden
> Subject: Re: swizzling a class to a subclass inorder to add ivars (&
> methods) to a class
>
> Hi Scott, perhaps I'm being stupid here, but how about using
> poseAsClass: ?
>
> Mike.
>
> On 30 Oct 2006, at 04:08, Scott Morrison wrote:
>
> >
> > The mantra for categories and posed class is that you cannot add
> > ivars to a category or a posed class -- leaving you to fiddle with
> > mutable dictionarys and tablemaps to implement extra variables. (ugh!)
> >
> > However, you can add ivars to a subclass -- so I got to thinking --
> > can you redirect an allocation for a class to a subclass so that
> > for all intents and purposes you can add ivars.
> >
> > In playing around, I found that by swizzling the classMethod:   +
> > [NSObject alloc], you can redirect the allocation of a class to a
> > subclass as follows:
> > //--------------------------------------------------------------------
> > --------------------------------------------------------------------
> >
> > @interface SubClass: AnyClass
> > {
> > 	NSString * extraIvar;
> > }
> >
> > @end
> >
> > static IMP oldAlloc = NULL;
> > @implementation NSObject (myCategory)
> > +(id) MYalloc{
> > 	id result;
> >
> > 	if(self == [AnyClass class]){
> > 		self = objc_getClass("SubClass"); //restate the class as the
> > subclass
> > 		result = NSAllocateObject(self,0,nil);  // allocate the
> subclass
> > 	}
> > 	else
> > 		result = oldAlloc(self,_cmd);
> > 	return result;
> > }
> >
> > + (void) load {
> > 	oldAlloc = replaceClassMethod(@selector(alloc),self,@selector
> > (MYalloc),self); // standard class method swizzle the alloc method
> > of NSObject
> > }
> > //--------------------------------------------------------------------
> > --------------------------------------------------------------------
> >
> >
> > One catch would be that any  factory methods and any instance init
> > methods may have to be reproduced in the subclass if you want to
> > init your subclass ivars
> > eg.
> >
> > (id) init___:(id) anObject{
> > 	if ((self = [super init___:anObject])){
> > 		extraIvar = [[NSString alloc] initWithString:@"test iVar"];
> > 	}
> > 	return self;
> > }
> >
> >
> > Another catch would be that any test directly for an instance's
> > class type would fail (but tests for isKindOfClass: would be ok)
> >
> >
> > In anycase -- technically this is possible -- I have it working on
> > some test code
> >
> > However -- IS IT SAFE ??  -- if no -- why not ---
> > if  "sorta" -- what are the gotchas and pitfalls?
> >
> >
> >
> >
> > _______________________________________________
> > Do not post admin requests to the list. They will be ignored.
> > Cocoa-dev mailing list      (email@hidden)
> > Help/Unsubscribe/Update your Subscription:
> > 40gmail.com
> >
> > This email sent to email@hidden
>
>  _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Cocoa-dev mailing list      (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: swizzling a class to a subclass inorder to add ivars (& methods) to a class
      • From: Mike Abdullah <email@hidden>
References: 
 >Re: swizzling a class to a subclass inorder to add ivars (& methods) to a class (From: Mike Abdullah <email@hidden>)

  • Prev by Date: how to make an NSStatusItem display something other than a menu?
  • Next by Date: Re: (RS)What's the type of a selector?[2]
  • Previous by thread: Re: swizzling a class to a subclass inorder to add ivars (& methods) to a class
  • Next by thread: Re: swizzling a class to a subclass inorder to add ivars (& methods) to a class
  • Index(es):
    • Date
    • Thread