Objective C - init 和构造函数之间的区别?

2023-11-23

我试图找到 Objective C 中 init 和构造函数之间的区别。我不是 C 开发人员,但我需要将一些 Objective C 代码转换为 Java,实际上我无法理解两者之间的区别。


在 Objective-C 中,对象的生成方式分为两部分:分配 and 初始化.

首先为对象分配内存,该对象会被零填充(除了一些您不需要关心的 Objective-C 内部内容):

myUninitializedObjectPointer = [MyClass alloc];

下一阶段是初始化。这是通过以下方法完成的init按照惯例。由于各种原因(尤其是在使用 ARC 时),您应该遵守此约定,但从语言的角度来看没有必要。

myObjectPointer = [myUnitializedObjectPointer init];

或一行:

myObjectPointer = [[MyClass alloc] init];

在其他语言中这些init方法被称为构造函数,但在 Objective-C 中,分配对象时并不强制调用“构造函数”。您有责任致电适当的部门init方法。在 C++、C# 和 Java 等语言中,分配和初始化紧密耦合,以至于您无法在不初始化对象的情况下分配对象。

简而言之:init方法可以被认为是构造函数,但只是通过命名约定而不是语言强制。对于 Objective-C 来说,它们只是普通的方法。

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

Objective C - init 和构造函数之间的区别? 的相关文章

  • “没有合适的默认构造函数可用”——为什么会调用默认构造函数?

    我已经查看了与此相关的其他一些问题 但我不明白为什么在我的情况下甚至应该调用默认构造函数 我可以只提供一个默认构造函数 但我想了解它为什么这样做以及它会产生什么影响 error C2512 CubeGeometry no appropria
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 为什么使用 Create 方法而不是使用“new”?

    静态构造函数有什么优点以及什么时候适合使用 public class MyClass protected MyClass public static MyClass Create return new MyClass 然后通过创建该类的实例
  • 重叠的装载机圆

    我试图重现苹果为应用程序 活动 制作的重叠圆圈 见下图 如果您使用标准贝塞尔路径 起始 结束位置将仅在 0 到 2PI 之间产生影响 例如 如果您尝试填充 4PI 即使使用一些阴影 则无法模拟重叠加载 如何制作类似于苹果解决方案的东西来创建
  • 如何用图片替换UITableView?

    我有一个 UITableView 默认为空白 直到用户编辑并向其添加数据 我想显示一张带有说明的图像 直到用户编辑它为止 图片的大小非常适合导航栏和标签栏之间 有没有办法以编程方式执行此操作 您可以使用removeFromSuperview
  • Objective-C:int值无故改变

    Objective C 我需要帮助保留 int 的值 无需我的命令 它就在我身上发生变化 最初的问题是 如何声明和保留 int 这在另一篇文章中得到了满足 Objective C 如何声明和保留 int https stackoverflo
  • 如何从 AFNetworking 和 AFJSONRequestOperation 获取可变字典?

    我将 JSONKit 与 AFNetworking 的 AFHTTPClient 带有 AFJSONRequestOperation 一起使用 我似乎无法弄清楚如何触发使用 JSONKit 的 mutableObjectFrom 方法 而不
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • ios 导航 堆栈操作

    我在尝试从 iOS 应用程序操作导航堆栈时遇到问题 或者至少是由于这种操纵而产生的行为 我的情况 我有 3 个 ViewController 控制器a显示多个级别 控制器 b 是游戏视图 控制器 c 是某种分数 显然 我将在控制器 a 中选
  • 确定 Objective-C 方法在运行时是否是可变的

    有没有办法在运行时找出给定方法是否是可变参数类型 就像是method getTypeEncoding 这不会告诉我一个方法是否接受可变数量的参数 或者有什么技巧可以告诉我们吗 罗伯特的评论是正确的 考虑 interface Boogity
  • 关于窗口层次结构的警告

    我的调试器中出现这样的警告 这是什么意思 Warning Attempt to present
  • 在 Swift 中使用 CommonCrypto 解密时出现问题

    我在一家Swift only加密 解密Extension for String and NSData 并且 crypt 部分的工作基于 Zaph 在链接问题中提供的答案 在 Swift 中使用 CCCrypt CommonCrypt 时出现
  • 来自 iPhone/iPad 的 json Web 服务

    有人可以帮助我解决如何从 iphone 或 ipad 使用 json Web 服务的问题吗 这里我的要求是使用 API 密钥实现 json webservice 如果可能的话发布一些教程或示例链接 谢谢 规范的 JSON 处理库是here
  • 在 swrevealcontroller 之前实现登录屏幕

    我刚刚开始学习 IOS 开发 我已经按照给定的在线教程成功实现了 SWRevealViewController 一切都按预期工作 然后 我决定添加一个登录屏幕 这将是应用程序运行时用户看到的第一个页面 我采取的步骤如下 将 UIViewCo
  • 在不同的捆绑包上测试 iPhone 应用内购买?

    我们有一组 iPhone 应用程序的 Beta 测试人员 最近 我们在应用程序中添加了应用内购买功能 在此之前 我们会使用单独的捆绑 ID 和名称向 Beta 测试人员发送临时版本 以便他们可以在手机上拥有商店版本和临时版本 然而 似乎我们
  • 如何在 Xcode 4 中在 .h 和 .m 之间切换

    刚刚安装的 Xcode 4 到目前为止一切顺利 除了 Apple 更改了所有键盘快捷键 有人知道如何在 h 和 m 之间切换吗 苹果改变了各种快捷键 但要在标头和实现之间切换 新的快捷键是 You can change it back to
  • 两者都实现了类。将使用两者之一

    我有一个项目 它具有使用 SocketRocket 的依赖项 通过 CocoaPods 安装 并从 HeapAnalytics 导入了静态库 显然 HeapAnalytics 库已经使用了 SocketRocket 编译时没有出现错误 但在
  • 为什么使用[ClassName alloc]而不是[[self class] alloc]?

    我正在读马克 达尔林普尔 Mark Dalrymple 的著作在 Mac 上学习 Objective C 仅在协议章节 所以仍然相对较新 并试图弄清楚一些事情 为什么要通过类自己的名称来引用它 如果我有一个叫做Foo 为什么我会想写 比如说
  • iOS 10 的错误? NSDate 日本地区时间描述和 24 小时休息

    这似乎是 iOS 10 的一个错误 在 iOS 8 和 9 中都可以 NSDate date description 的小时描述是错误的 它附加了 24 小时描述和 12 小时描述 我没有使用 NSDateFormatter 只是默认设置
  • UISplitViewController - 推送模态视图

    使用 UISplitViewController 时推送模态视图的最佳实践是什么 您会从 RootViewController DetailViewController 还是直接从应用程序委托推送 理想情况下 我想要实现的功能是在基于某些条

随机推荐

  • 角度数据绑定 - 输入类型=“数字”

    我在使用 AngularJS 绑定数字值时遇到问题 我在 JSFiddle 上放了一个简化的示例 http jsfiddle net treerock ZvdXp div div
  • 在 Rails 中使用 UJS 时,ajax:success 和 ajax:complete 回调不起作用

    我有一个链接 当我点击它时 它会触发一个ajax调用 然后用另一个链接替换这个链接 例如原始链接是 添加朋友 当我点击这个链接时 它会向add friend操作发送一个ajax请求如果添加了朋友 上面的链接将被另一个链接 取消请求 替换 我
  • OpenMP 和 MPI 混合程序

    我有一台有 8 个处理器的机器 我想在我的代码中交替使用 OpenMP 和 MPI 如下所示 OpenMP 阶段 排名 1 7 等待 MPI Barrier 等级 0 使用所有 8 个带有 OpenMP 的处理器 MPI 阶段 等级 0 达
  • Javascript 的 setInterval 是否会阻止函数返回?

    我有一个 JavaScript 函数function a 我想每 10 秒被执行一次 我发现我可以使用setInterval这样我就可以做类似的事情 setInverval a 10000 我的问题如下 这是否意味着i 每 10 秒调用一次
  • 如何添加全局 ASP.Net Web Api 过滤器?

    我创建了一个 Web Api 过滤器 使用System Web Http Filters ActionFilterAttribute 但我无法让它在 ASP Net MVC 4 中工作 我尝试将其添加到RegisterGlobalFilte
  • 连接 postgresql 和 codeigniter

    我是 postgresql 的新手 并且已经使用 Codeigniter 一年了 我有一个小型 postgresql 数据库 我想从 Codeigniter 调用它 在我的database php 文件中我有这样的设置 active gro
  • Any、AnyVal、AnyRef、Object 之间有什么关系以及它们在 Java 代码中使用时如何映射?

    我通常会尝试每种组合直到它编译为止 有人可以解释我应该在哪里使用什么吗 我会不同意Chris s answer一方面 课程Any AnyRef and AnyVal are类 但由于 JVM 的内在限制 它们在字节码中不会显示为类 This
  • Python:matplotlib - 概率质量函数作为直方图

    我想在同一个图表上绘制直方图和线图 然而 要做到这一点 我需要将直方图作为概率质量函数 所以我想在 y 轴上有一个概率值 但是 我不知道该怎么做 因为使用normed选项没有帮助 下面是我的源代码和使用数据的预览 我将非常感谢所有的建议 d
  • 如何在运行时更改 Angular Material Datepicker 格式

    我正在研究一个Angular应用程序与Material设计 我正在使用Moment js解析和格式化日期 在我的其中一个页面中 我有一个材料的日期选择器 我遵循了材料的指南来使日期选择器与moment对象 而不是在本机上Date objec
  • 从自定义操作捕获 ArgumentTypeError 异常

    从我自己的自定义操作中抛出 ArgumentTypeError 异常并让 argparse 为我捕获它的最佳实践是什么 看来 argparse 的 try except 块不处理我的自定义操作的此异常 尽管它的内置操作做得很好 class
  • 如何从 checkout 获取 svn 版本号以在 dsl 中使用

    我创建了一个管道作业 并希望获取 svn 版本号 以便在调用 shell 脚本时启用进一步的下游处理 我正在使用类似于以下内容的管道脚本 node Mark the code checkout stage stage Checkout Ge
  • 在一个语句中打印多行,不带前导空格[重复]

    这个问题在这里已经有答案了 因此 对于我的第一个项目 它是一个简单的程序 可以打印您所在班级的姓名以及您就读的高中 让我困惑的一件事是对于其中的一个我必须使用一个print 所有这些的声明 我需要对其进行格式化 以便每条信息位于不同的行上
  • 尽管使用 DebugType=None,Visual Studio 发布仍生成 .pdb 文件

    我正在使用以下发布配置文件从 Visual Studio 中发布控制台应用程序
  • 如何使光标的高度与UITextField中文本的高度相同?

    我的 UITextField 光标太长 下图中 123123 的光标 如何让光标高度与文字高度一致 我偶然发现了这个问题 尽管它有点老了 但我还是觉得有必要回答它 因为接受的答案实际上是不正确的 您确实可以更改光标的高度 或宽度 只是子类化
  • 如何让java类线程安全?

    我有一个java类如下 class User String name String phone public String getName return name public String getPhone return phone 该类
  • 将 System.Drawing.Bitmap 转换为 stdole.StdPicture

    我当前有一个 System Drawing Bitmap 我需要将其转换为 stdole StdPicture 目前我正在使用 var pic stdole StdPicture Microsoft VisualBasic Compatib
  • 如何在 Mountain Lion 上安装 MySQLdb

    我是 Python 新手 在构建 MySQLdb 时遇到问题 试图让 Google AppEngine SDK 运行 我刚刚从 Snow Leopard 升级到 Mountain Lion 并安装了最新的 XCode 4 4 我已经下载了h
  • 无法使用 SelectListitem 获取不同的值

    我试图获取下拉列表的不同值 但是当使用以下语法时 它会带回所有行 有人可以告诉我如何使用正确的语法获取不同的值集吗 IEnumerable
  • Google 云端硬盘文档时间戳

    我假设修改日期搜索字段是修改日期 显然 或上传到驱动器的日期 有没有办法在其本机系统上保留文件的原始创建日期 或者有没有可能修改这个字段 谢谢你 肖恩 您可以使用 File Update 设置上传后的修改日期 https developer
  • Objective C - init 和构造函数之间的区别?

    我试图找到 Objective C 中 init 和构造函数之间的区别 我不是 C 开发人员 但我需要将一些 Objective C 代码转换为 Java 实际上我无法理解两者之间的区别 在 Objective C 中 对象的生成方式分为两