Objective-C 中的继承和类别有什么区别

2023-12-13

有人可以向我解释一下 Objective C 中类别和继承之间的区别吗?我读了维基百科中的条目那里关于类别的讨论看起来与继承的讨论没有任何不同。我也看了《开放iPhone开发》一书中关于该主题的讨论,仍然不明白。


有时,继承似乎比它的价值更麻烦。当您想要向现有类添加一些内容以更改该类的行为时,可以正确使用它。

对于类别,您只希望现有对象多做一点事情。如前所述,如果您只想拥有一个处理压缩的字符串类,则不需要对该字符串类进行子类化,只需创建一个处理压缩的类别即可。这样,您不需要更改已使用的字符串类的类型。

线索是类别仅添加方法的限制,您不能使用类别向类添加变量。如果该类需要更多属性,则必须对其进行子类化。(编辑:我相信您可以使用关联存储)。

类别是添加功能的好方法,同时符合面向对象的原则,优先选择组合而不是继承。

2012年1月编辑

现在情况已经改变了。使用当前的 LLVM 编译器和现代的 64 位运行时,您可以向类添加 iVar 和属性扩展(不是类别)。这可以让您将私有 iVar 排除在公共接口之外。但是,如果您声明 iVar 的属性,它们仍然可以通过 KVC 访问/更改,因为 Objective-C 中仍然没有私有方法这样的东西。

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

Objective-C 中的继承和类别有什么区别 的相关文章

  • PHP 相当于朋友或内部

    php 中是否有相当于 朋友 或 内部 的东西 如果没有 是否有任何模式可以遵循来实现这种行为 Edit 抱歉 但标准 Php 不是我想要的 我正在寻找类似于马戏团长所做的事情 我有一些类在后端进行 C 风格的系统调用 并且杂耍已经开始变得
  • 为什么不允许 System.out.println(super) ?

    Why is System out println super 不允许 System out println this 这没问题并且this toString 自动调用并打印 当然 用实例变量代替也可以this 然而 this and su
  • IBOutlet、实例变量和属性:最佳实践

    今天 我对有关声明 IBOutlet 和实例变量 管理它们 使用正确的访问器以及正确释放它们的最佳实践进行了各种研究 我已经差不多了 但我有一些小问题 我希望有人能够就最佳实践提出建议 我会将它们格式化为代码并注释问题 以便更容易理解 我排
  • 为什么我的 UIPickerView 崩溃了?

    当我使用 UIPickerView 加载视图时出现以下错误 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序 原因 NSCFNumber isEqualToString 无法识别的选择器发送到实例 0x
  • 如何更改ios中FBSDKLoginButton中的默认登录按钮?

    如何自定义 Facebook 中的登录按钮 我不想使用 Facebook 默认登录按钮 对于 SDK 4 0 您应该添加一个按钮 并在按钮操作中使用以下代码 IBAction loginButtonClicked id sender FBS
  • NSView 鼠标跟踪

    我在 Mac OS X 上遇到了 Cocoa NSView 的奇怪行为 我在 NSView 容器中有一个自定义 NSView 这个自定义 NSView 跟踪鼠标移动 点击 并有一个工具提示 当我在所描述的视图上方添加 NSView 时 即使
  • 如何使用 MPMusicPlayerController 播放音乐?

    任何人都可以建议我如何在我的应用程序中使用 MPMusicPlayerController 播放音乐 任何人的帮助将不胜感激 谢谢你 莫尼什 创建一个MPMediaPickerController这样你就可以从 iPod 中选择一些音乐 然
  • 在 Ruby 中,围绕子方法执行块的最佳方法是什么?

    我有一个父类 class Base def my method block method do EXECUTE WHATEVER S IN THE CHILD VERSION OF my method HOW TO DO end end d
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • 理解 Objective-C 中选择器的唯一性

    我无法理解 选择器 的部分功能 如苹果指南中所述 我把我感到困惑的部分加粗了 在 Objective C 中 选择器有两个含义 可以用来参考 当在源代码消息中使用方法时 只需使用方法的名称 到一个物体 不过 它也指的是唯一标识符 编译源代码
  • 将UIWebView显示的PDF保存到本地

    我有一个UIViewController与UIWebView显示一个 pdf 文件 具体取决于之前单击的行UITableView 现在我想添加一个按钮 供用户在本地保存此 pdf 文件以供离线使用 然后还有第二个UITableView它应该
  • 如何使用群组在 iPhone 和 Apple Watch 之间共享数据?

    我是 Watchkit 开发新手 无法找到在 iPhone 和 iWatch 之间共享数据的解决方案 请帮助我 我希望使用组来共享数据 我们可以使用组在 iPhone 和 iWatch 之间传递数据 基本上iWatch不能做任何处理 我们需
  • jQuery 和面向对象的 JavaScript - 如何?

    我读了this http www sweetvision com 2009 07 07 how to use object oriented programming with jquery and this http archive plu
  • “EXC_BAD_ACCESS”与“分段错误”。两者实际上相同吗?

    在我的前几个虚拟应用程序 用于学习时练习 中 我遇到了很多EXC BAD ACCESS 这以某种方式告诉我错误访问是 您正在触摸 访问一个不应该的对象 因为它尚未分配或释放 或者只是您无权访问它 查看此示例代码 该代码存在访问错误问题 因为
  • 当表格为空时 iPhone UITableView 图像背景

    我想当我的 UITableView 为空时显示图像背景 目前 我尝试将 UIImageView 添加到包含表格的视图控制器 但 XCode 不允许这样做 有没有好的方法呢 您可以在表视图顶部添加图像视图或更改表视图的背景视图 Check i
  • 如何使用固定宽度和自动布局正确缩放图像?

    我有一个动态 UIImage 和一个固定宽度为 280 0px 的 UIImageView 并且我正在使用自动布局 在 UIImage 视图上 我设置了宽度和高度约束 并降低了高度约束的优先级 我选择了 aspect fit 并将内容拥抱和
  • 播放循环声音的最简单方法是什么?

    在 iPhone 应用程序中播放循环声音的最简单方法是什么 可能最简单的解决方案是使用AVA音频播放器 http developer apple com library ios DOCUMENTATION AVFoundation Refe
  • iOS 11 中的密码自动填充快速输入栏

    iOS 11 中引入了一项新功能 应用程序密码自动填充 此功能允许用户直接从键盘快速输入栏使用其应用程序中保存的密码 https techcrunch com 2017 06 08 ios 11s new password autofill
  • 如何删除以前的 ViewController

    我是一名学生 对编程还很陌生 我正在尝试在业余时间学习 Objective C Swift 我使用 spriteKit 和 swift 制作了一个游戏 有多个菜单 场景 我正在尝试从一个视图控制器转换到另一个视图控制器 为此 我使用了以下代
  • 构建 iOS 应用程序后退出代码 1 错误

    我正在尝试使用 RestKit 构建我的项目 当我构建它时 我收到以下错误 我尝试使用 Apple LLVM 3 0 和 LLVM GCC 4 2 进行编译 两者都产生相同的结果 任何人有任何想法是什么导致了这个问题 Ld Users Ji

随机推荐

  • 类型名称与变量类型

    我想检查 a 的类型Variant 这是可以做到的TypeName and VarType 我想使用VarType效率更高 因为它不涉及字符串比较 仅涉及数字比较 任何偏爱的理由TypeName Public Sub testType Di
  • 指南针编译时间太长

    自从更新到最新版本的 Compass 以来 编译现在需要 4 294 秒 由于需要 我需要这个版本的指南针susy Running sass dist sass task Running watch task Completed in 4
  • 如何使用 JavaScript 发送电子邮件?

    如何使用 JavaScript 发送电子邮件 我不想使用mailto 因为如果我使用mailto 它会打开一个电子邮件客户端 做不到 发送电子邮件仅适用于服务器端 如果您所做的只是发送电子邮件 那么快速PHP脚本可能会达到目的
  • Delphi Tokyo 中不再使用 Form.PixelsPerInch

    在较旧的 Delphi 中 例如 Delphi XE4 很清楚Form PixelsPerInch财产是为了 如果我更改此属性并保存表单 关闭然后重新加载它 则表单上的所有控件和字体将相应地调整大小 然而 在德尔福东京 也许自西雅图以来 进
  • 无效的 Geojson 对象 Angularjs &Leafletjs

    在我的项目中 我尝试将过滤器与表和地图上显示的 geojson 同步 为了实现这一目标 我使用了 Angular 和以前的 Angular Leaflet Directive 但性能对于我的目的来说很慢 所以我决定为 Leaflet js
  • 如何在不同的语言环境下使用 PostgreSQL upper() 函数?

    我在共享主机上有一个 PostgreSQL 数据库 使用的结果upper由于区域设置的原因 我的本地数据库中的函数有所不同 这是我想要的 并且在我的本地环境中拥有 SELECT version PostgreSQL 8 4 16 on i3
  • Python-根据列值将数据帧拆分为多个数据帧并用这些值命名它们[重复]

    这个问题在这里已经有答案了 我有一个大型数据集 列出了在全国不同地区销售的竞争对手产品 我希望通过使用这些新数据帧名称中的列值的迭代过程 根据区域将该数据帧拆分为其他几个数据帧 以便我可以单独处理每个数据帧 例如按价格对每个地区的信息进行排
  • Python Turtle 图形键盘命令

    有人对使用键盘命令在 python 2 7 中控制海龟图形有任何见解吗 我在这个网站和其他网站上进行了广泛的研究 觉得我正在做正确的事情 但它只是不想为我工作 以下是我到目前为止所得到的 谁能告诉我哪里出错了 from turtle imp
  • Django 模板过滤器 - 一行

    我正在寻找一个 Django 模板过滤器 它将多行结构转变为一大行 有人实施过吗 原因是 我有一个表单 form as p 创建一个多行html片段 我想创建一个javascript变量 它是一个html片段 但是当我这样做时 var ne
  • 启用和禁用 gridview 上的链接按钮

    我想根据条件在 gridview 的某些行上启用或禁用链接按钮 我可以在一行上启用 linkbutton 并在同一网格视图的另一行上禁用它吗 我的代码在这里 protected void GridView1 RowDataBound obj
  • 使用 regex_search 获取所有匹配项的索引?

    我刚刚开始学习如何使用regex用于字符串处理 C 11新功能 如果以下问题太愚蠢 请原谅我 目前我应用以下代码来获取所有匹配项的索引 string str aaabxxxaab regex rx ab vector
  • 为什么 3 和 x(被分配为 3)在 Haskell 中具有不同的推断类型? [复制]

    这个问题在这里已经有答案了 Haskell 中的类型推断有一点学习曲线 至少可以这么说 开始学习它的一个好方法是通过简单的例子 因此 以下是类型推断的 hello world 考虑以下示例 Prelude gt t 3 3 Num t gt
  • 无符号整数溢出

    将会发生什么unsigned int当我溢出它时包含它 具体来说 我想与两个相乘unsigned ints 里面会有什么unsigned int乘法完成后 unsigned int someint 253473829 13482018273
  • 为什么不能使用 memcmp() 函数比较浮点类型?

    bool floatcmp const float a const float b const void p void a const void q void b if memcmp p q sizeof float 0 return tr
  • 如何使我的自定义类型与“基于范围的 for 循环”一起使用?

    像现在很多人一样 我一直在尝试 C 11 带来的不同功能 我最喜欢的之一是 基于范围的 for 循环 我明白那个 for Type v a 相当于 for auto iv begin a iv end a iv Type v iv 然后be
  • 在另一个接口中使用 Typescript 接口的一个属性

    假设我有一个 Typescript 接口 如下所示 export interface IMyObj id string type AA AZ XY 现在我需要另一个也有这个接口type field export interface IMyO
  • 释放 (vfree-ing) 指向易失性数据的指针

    volatile似乎是每个人永无止境的问题 我以为我已经知道了一切 但后来我遇到了这个 所以 我有一块在线程之间共享的内存 我这样定义它 volatile type name 如果这让你感觉好一点 你可以想象type只是一个int 这意味着
  • Singleton 实现中的按需初始化惯用法与简单静态初始化器

    当使用静态初始化实现线程安全单例时 Initialize On Demand 习惯是否真的有必要 或者实例的简单静态声明就足够了 将实例简单声明为静态字段 class Singleton private static Singleton i
  • 为什么 gems 安装在与我运行的 Ruby 版本不同的目录中?

    当我安装 gem 时 它会安装在名为 1 9 1 的目录中 尽管这不是我安装的 Ruby 版本 ruby v ruby 1 9 3p327 2012 11 10 revision 37606 x86 64 darwin12 2 0 gem
  • Objective-C 中的继承和类别有什么区别

    有人可以向我解释一下 Objective C 中类别和继承之间的区别吗 我读了维基百科中的条目那里关于类别的讨论看起来与继承的讨论没有任何不同 我也看了 开放iPhone开发 一书中关于该主题的讨论 仍然不明白 有时 继承似乎比它的价值更麻