objective-c - 在 Objective-C 中是否需要一个类来覆盖 +alloc?

标签 objective-c memory-management

基于对 this question 的一些回答看起来 +alloc 做了一些幕后魔术来为 Objective-C 中的对象实例分配内存。是否需要覆盖 +alloc?

最佳答案

这种情况很少见。

NSString 是一个重写 +alloc 作为实现细节的类的例子。如果你要检查,你会发现 +[NSString alloc] 返回类 NSPlaceholderString 的东西。这是字符串 class cluster 实现的一部分.

您也可以重写以从不同的分配 NSZone 分配为默认值。或者,您可以玩一些小把戏,比如调用 NSAllocateObjectextraBytes 设置非零值,以便在您的 ivar 之后提供动态的空间量。例如,您可能认为您通常最终得到的 NSString 的私有(private)子类看起来像这样:

@interface {
    NSUInteger length;
    unichar *data;
}

但事实并非如此。它是包含长度和字符数据的单个内存块。不同的 NSString 实例是不同大小的内存块。这是您可以通过直接调用 NSAllocateObject 来安排的事情。

但所有这些都是技巧和窍门。如果您覆盖 +alloc,就会发生一些特别的事情。

关于objective-c - 在 Objective-C 中是否需要一个类来覆盖 +alloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1371390/

相关文章:

android - 确定在 Android 中运行的应用程序的物理内存地址

ios - 未调用委托(delegate)方法?

ios - 将披露指示器添加到表格 View 单元格

objective-c - 8192x8192 UIView 滞后

objective-c - 检测 iOS 应用程序中的私有(private) API

memory-management - Spark 读取大文件

c++ - 从析构函数内部调用 delete 会导致堆栈溢出吗?

ios - NSCache - 标记对象不可移除

objective-c - 以编程方式使用自动布局对齐 NSView

c++ - 覆盖标准库使用的内存分配方法?