Objective C 中类别是如何实现的?

2024-05-16

作为一名程序员,我知道如何使用类别,但我很好奇它们是如何实现的。编译器是否将它们编译为对类替换方法 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html#//apple_ref/c/func/class_replaceMethod来自静态初始化程序?谢谢。


关于主题的新答案。

每个类都有一个方法列表,在进行方法查找时,会从头到尾扫描方法列表。如果没有找到方法,则扫描超类列表等,直到到达根类。找到的方法会被缓存,以便下次更快地查找。

将类别加载到类时,类别方法列表是前置的到现有列表,并且缓存被刷新。由于列表是按顺序搜索的,这意味着将找到类别方法before下次搜索时使用原始方法。

当首次访问该类时,类别的设置是从静态数据延迟完成的。如果加载带有可执行代码的包,则可以重新完成。

简而言之,它的级别比class_replaceMethod().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective C 中类别是如何实现的? 的相关文章

  • 检测iOS设备类型

    在我的应用程序 用 Objective C 编写 中 如何检测设备是 iPhone iPad 还是 iPhone5 if UIDevice currentDevice userInterfaceIdiom UIUserInterfaceId
  • 如何在 XCode 中将 C++ 与 Objective-C 结合使用

    我想在 Objective C 中使用 重用 C 对象 我有一个包含类定义的 hello h 和用于类实现的 hello cpp class Hello int getX 我在 Objective C 函数中使用这个类 include he
  • Clang 中所有 Objective-C 预处理器指令的列表

    Clang 中是否有所有 Objective C 预处理器指令的列表 我说的是 pragma mark Section I or pragma unused variableName or warning message 我想了解更多信息以
  • UICollectionView PerformBatchUpdates 同时插入、删除、移动

    我正在尝试使用UICollectionView s performBatchUpdates方法来执行过滤操作 某种 并且在块内我插入单元格 移动单元格和删除单元格 我得到了一些奇怪的结果 所以我想知道这种行为是否真的受到支持 我认为索引变得
  • Xcode 警告“未使用属性访问结果 - getter 不应用于产生副作用”

    当我调用本地例程时 我收到此警告 我的代码是这样的 void nextLetter NSLog s FUNCTION currentLetter if currentLetter gt letters count 1 currentLett
  • 在 Objective C 中使用 NSMutableArray 对象的指针

    当在 cocoa touch 中从 NSMutableArray 检索对象时 下面的代码可以吗 我应该每次分配 alloc 新的 Page 对象还是只是指向它 我是否需要对 Page pageObj 之后执行任何操作 例如将其设置为 nil
  • 拖动调整 NSView(或其他对象)的大小

    我正在尝试构建一个应用程序 允许用户使用可以调整大小的矩形边界框来指定图像的多个区域 到目前为止 我已经有一个NSScrollView其中包含一个NSImageView这样用户就可以放大图像并根据需要滚动 我目前的想法是我可以使用NSVie
  • AutoLayout 将 UILabel 高度设置为零

    我有一个UILabel对于其他视图中的项目描述 所有内容均使用 Interface Builder 中的约束进行布局 您可以在下图中看到所有相关约束 行数也设置为0 我没有设置高度限制 因为我想要UILabel根据其包含的文本调整大小 相反
  • iOS7上UITableViewCell显示白色背景且无法修改

    我已经实现了一个继承自的自定义表格视图单元格类UITableViewCell 表格视图包含背景图像 所以我希望单元格的背景是透明的 iOS7之前看起来很棒 然而 在 iOS7 中 单元格始终显示为白色背景 即使对于 Xcode7 2015
  • 如何处理 iPhone 屏幕尺寸/背景图像分辨率

    在 iPhoneX 之后 我真的很纠结于支持所有设备的图像尺寸和命名约定 有没有办法在 4 7 5 5 和 5 8 屏幕上使用 3x 图像 全屏图像视图应该使用的确切尺寸是多少 您可以使用图像 pdf格式 因此您只需要管理 1x 的单比例图
  • 应用程序:didReceiveRemoteNotification:未调用 fetchCompletionHandler

    出现了这个功能application didReceiveRemoteNotification fetchCompletionHandler当应用程序被强制退出时不会被调用 我的印象是 无论应用程序处于什么状态 该函数都会被调用 但似乎只有
  • 在 iOS 中,如何以编程方式填写 pdf 表单字段?

    我需要获取一个现有的 pdf 文件 并以编程方式填写带有文本的表单字段列表 然后保存 pdf 而不将其显示给用户 例如 如果 pdf 文件包含名为 LastName 和 FirstName 的字段 我想将 FirstName 的值设置为 L
  • 自定义信息窗口上的按钮未接收 ios 中的操作

    我在 iOS 应用程序中使用 Google 地图 并实现了一个自定义信息窗口来显示标记的标题 现在 我在该自定义信息窗口上添加了一个按钮 但我的问题是按钮操作方法没有被调用 自定义信息窗口 h import
  • Swift try inside Objective-C 块

    我需要创建一个函数foo它接受一个抛出闭包作为参数 我可以使用 Swift 或 ObjC 来实现它 但我需要能够从两者中调用它 像这样 Swift func bar throws func foo block throws gt void
  • 带有嵌套分组变量的多行轴标签,用于 - R 中的堆积条形图

    我想使用 ggplot 制作一个包含多个类别的堆叠条形图 并带有嵌套的标记 X 轴 类似于我使用 Excel 制作的条形图 如此处所示 我尝试使用给出的例子here https stackoverflow com questions 181
  • 如何将 NSMutableArray 添加到 NSMutableArray Objective-c

    我正在从 Java 切换到 Objective c 但遇到了一些困难 我已经搜索过这个问题但没有取得太大成功 我有一个存储 NSMutableArrays 的 NSMutableArray 如何向数组添加数组 您可以在数组中存储对另一个数组
  • 如何使用 didMoveToView 作为 initWithSize ?

    我将 Xcode 更新到版本 6 从那时起 我就无法使用以前在 Xcode 5 中使用 Objective C 编写的代码了 有一些新文件 GameScene h 和 GameScene m 以及 GameScene sks 而不是 MyS
  • “无法取消归档名为 UITableViewController 的元素”

    我一直在按照 构建你的第二个 iOS 应用程序 教程一步步进行 在教程承诺所有错误都会消失之后 我遇到了这个错误 但直到其他错误都出现后 该错误才出现 全部更正 我尝试编译它 错误 The document MainStoryboard i
  • Objective-C 点表示法与类方法?

    请注意 我特别指的是点表示法与类方法一起使用 而不是与实例方法一起使用 出于好奇 我想看看如果我尝试在类方法中使用 Objective C 点表示法语法会发生什么 我的实验如下 import
  • dispatch_semaphore_t 重用 - 我在这里缺少什么?

    我有一些代码 其中使用dispatch semaphore t 来表示操作完成 当信号量是成员变量时 它的行为似乎不正确 我将展示有效的示例代码和似乎无效的示例代码 implementation someClass dispatch sem

随机推荐