I have an application that models events as objects.  They are frequently 
allocated and deallocated.  It occurred to me that this class might be a 
canidate for a custom allocator that allocates objects from a simple pool.

I found this article (from 2010)
  
https://www.mikeash.com/pyblog/friday-qa-2010-12-17-custom-object-allocators-in-objective-c.html
that describes my situation.

  - objects allocated and deallocated on same thread
  - not subclassed
  - direct subclass of NSObject

The gist of it is to override allocWithZone: to retrieve objects from a 'cache' 
(it could be pre-allocated, in my application).  There is a line that sets the 
ISA Pointer of the new object to the class.

I looked through the source code to NSObject.m and libobjc2/runtime.c and it 
looks like his idea doesn't violate any assumptions.

But I've been wondering a couple of things about this in the context of ARC and 
a 64-bit implementation.

    + (id)allocWithZone: (NSZone *)zone
    {
        id obj = GetObjectFromCache();
        if(obj)
            *(Class *)obj = self;   // set the ISA pointer to the CLASS
        else
            obj = [super allocWithZone: zone];
        return obj;
    }


1.  Is the assignment of the ISA pointer (the first slot in the object) to the 
CLASS
    still valid in 2018?  With 64-bit pointers I think some bits are used for 
refcounts
    and other things.  Maybe this assignment isn't safe.

    This article
        https://sectionfive.net/blog/2015/03/31/arc-in-depth-part-i/

    says that with "tagged pointers" you need to use a function 
object_setClass().

    Is that the right thing for libobjc2 and GNUstep.    

2.  Will this work with ARC?  It seems like keeping reference counts of 
references to instances
    is independent of alloc/dealloc of objects, so it shouldn't matter.


Thanks for any information or pointers!

-Tom



_______________________________________________
Discuss-gnustep mailing list
Discuss-gnustep@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to