Objective-C自定义内存分配器,适用于所有对象

Ser*_*hii 5 memory-management objective-c ios

如何使用我的自定义分配器为所有 Objective-C类正确替换标准/默认内存分配器(不仅适用于我自己的类)?

这不是我的第一需要,更像是我对此感到好奇.现在我最终得到了解决方案,这似乎是有效的,但它是非常不安全的:

@interface NSObject(Allocator)

+ (instancetype)allocWithZone:(_NSZone*)zone;

@end

@implementation NSObject(Allocator)

+ (instancetype)allocWithZone:(_NSZone*)zone
{
    (void)zone;
    size_t sizeToAlloc = class_getInstanceSize([self class]);

    void* allocatedMemory = getSharedObjCAllocator().alloc(sizeToAlloc);
    memset(allocatedMemory, 0, sizeToAlloc);

    id resultObject = objc_constructInstance([self class], allocatedMemory);
    return resultObject;
}

- (void)dealloc
{
    objc_destructInstance(self);

    if (getSharedObjCAllocator().validatePointer(self, false))
    {
        getSharedObjCAllocator().free(self);
    }
    else
    {
        ::free(self);
    }
}

@end
Run Code Online (Sandbox Code Playgroud)