alloc 和 init 他们实际做了什么

2024-06-28

有人可以向我解释一下 init 和 alloc 在 Obj-C 中的作用吗?我正在阅读这本 obj-c 书,其中给出了创建对象的示例,但它并没有真正详细介绍它的作用。 alloc返回什么? init 返回什么?

Animal * k = [Animal alloc];
k = [k init];

  • alloc分配一块内存来保存对象,并返回指针。

    MyClass* myObj = [MyClass alloc];
    

    myObj尚无法使用,因为其内部状态未正确设置。所以,不要写这样的代码。

  • init设置对象的初始条件并返回它。注意返回了什么 [a init] 可能不同于a.这解释了 Yannick 编写的代码:

    -init{
         self=[super init]; // 1.
         if(self){          // 2.
             ....
         }
         return self;       // 3.
    }
    
    1. 首先,您需要调用超类的init,设置超类的实例变量等。这可能会返回不等于原始值的内容self,所以你需要分配返回的内容self.
    2. If self为非零,表示超类控制的部分已正确初始化。现在您执行初始化。所有实例变量都设置为nil(如果它是对象)和0如果它是整数。您需要执行其他初始设置。
    3. 返回设置self。返回的self可能与分配的不同!因此,您需要分配结果init到你的变量。

这表明了一个重要的教训:永远不要将呼叫拆分为alloc and init。不要写:

 MyClass* myObj = [MyClass alloc];
 [myObj init];

because [myObj init]可能会返回其他东西。不要试图通过编写以下内容来解决这个问题:

 MyClass* myObj = [MyClass alloc];
 myObj=[myObj init];

因为你最终会忘记写这部分myObj=在第二行。

总是写:

 MyClass* myObj = [[MyClass alloc] init];

我也不建议这样写:

 MyClass* myObj = [MyClass new];

因为它没有正确调用初始化方法:某些类不接受普通的init。例如,NSView needs initWithFrame:,不能用new。所以,不要使用new either.

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

alloc 和 init 他们实际做了什么 的相关文章

  • 桌面上的 AVAudioSession?

    在 mac 桌面上 我试图录制系统声音 以及可选的麦克风声音 但一开始我只是录制系统声音 我正在遵循本指南 https www appcoda com ios avfoundation framework tutorial https ww
  • NSArray 查找一个或多个对象 - 最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 解决方案 我已将 BlackRider 的答案标记为正确 因为它是最通用的 特别是对于复杂的比较 但是还有其他非常好的答案和评论 我鼓励任何有相
  • 适用于 iOS (iPhone/iPad) 的 XMPP 库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • alloc 和 init 他们实际做了什么

    有人可以向我解释一下 init 和 alloc 在 Obj C 中的作用吗 我正在阅读这本 obj c 书 其中给出了创建对象的示例 但它并没有真正详细介绍它的作用 alloc返回什么 init 返回什么 Animal k Animal a
  • iOS 7 UIBarButtonItem 字体在点击时发生变化

    我正在尝试改变我的UIBarButtonItem字体 ViewController 加载时看起来不错 但是 如果我点击栏按钮 或者向右滑动 就像移动到上一个 ViewController 但然后拉回到当前的 ViewController 字
  • 在 Objective-c 中获取对象名称

    假设我有一个 Foo 类和该类 myFoo 的一个实例 Foo myFoo 是否有任何方法 dispalyFooObjectName 可以显示对象的名称 例如 NSLog i was called from s myFoo dispalyF
  • 何时为自定义视图创建 Interface Builder 插件?

    您何时建议使用插件将自定义视图集成到 Interface Builder 中 当浏览苹果的时候Interface Builder 插件编程指南 http developer apple com documentation Developer
  • iOS 6.0 Quicklook QLPreviewController 错误:“无法找到已加载代理的预览项目”

    我的应用程序一直使用 QLPreviewController 来显示所有类型的文件 在 iOS 5 x 中 它似乎做得很好 现在 在 iOS 6 0 中 我收到一个错误 它显示了控制器 但带有恒定的加载指示器 并且从未实际加载任何内容 日志
  • 如何在 Objective C 中将 html 数据转换为 PDF

    我想在 Objective C 中动态地将 html 转换为 pdf 转换它的最佳方法是什么 以便它保持与 html 相同的外观 提前致谢 Prasad UIGraphicsBeginPDFContextToFile https devel
  • 如何使用 NSDecimalNumber 获得除法的 int 和 modulo (mod)

    我对 NSDecimalNumber 及其 行为 感到困惑 我有一个 NSDecimalNumber 代表美元价值 比如 37 50 美元 我想知道 5 0 进入这个数字有多少次 然后知道剩下的是什么 我可以得到直除法并得到 7 50 但我
  • iPhone IOS5 Storyboard,如何使用自定义的 .xib 文件加载 UIViewController?

    我有一些来自旧 iOS4 项目的 UIViewController 它们使用的是在界面生成器中创建的 xib 我的新项目是为 iOS5 构建的 使用故事板 我正在尝试将 UIViewController 添加到故事板 但让它使用我已经拥有的
  • WGS84 iOS 上外部 GPS 数据的大地水准面高度高度偏移

    对于我正在编写的应用程序 我们将 IOS 设备与外部传感器连接起来 该传感器通过本地 WiFi 网络输出 GPS 数据 该数据以相对于海拔高度的 原始 格式出现 一般来说 所有 GPS 高度都需要应用与基于当前位置的 WGS84 大地水准面
  • 向 UIImageView 添加反射的最有效方法是什么

    我只想要最简单的方法在易于管理的 UIImageView 下进行反射 只需使用iPhone SDK 库中的示例代码 http developer apple com library ios samplecode Reflection Int
  • 从 UIImageView 的中心对 UIImageView 进行动画处理

    我有一个UIImageView应该从动画size 0 0 gt 93 75 我有以下内容 UIView animateWithDuration 0 5 delay 0 options UIViewAnimationOptionTransit
  • YouTube 嵌入 AirPlay UIWebView

    我正在开发一个视频应用程序 其中包含来自不同来源的大量视频 应用程序中的选项之一必须是通过电视上的 Airplay 播放视频 为了在我的应用程序中显示 YouTube 视频 我使用 YTPlayerView 它是 YouTube API 的
  • NSManagedObject 托管对象之外的子类作为普通对象

    我有一个实体对象 Country 其中包含国家 地区名称和国家 地区代码 它是 NSManagedObject 的子类 我将它与核心数据模型一起使用 将其值存储到持久存储中 我有一个地方 相同的国家 地区对象将用作普通对象 即我将使用它来存
  • iOS9 按需访问和下载资源

    我正在尝试实现新的 iOS9 功能应用程序细化 我了解如何在 Xcode 7 中标记图像并启用按需资源 但我不明白如何在我的应用程序中实现 NSBundleResourceRequest 有人可以帮助我 我将不胜感激 大部分信息都可以在 A
  • 有没有办法使用 setValue:forKey 来获取 C 类型变量?

    我在对象上设置了一些属性 大部分是GLfloat我想知道是否有办法使用 self setValue id value forKey id key 那需要一个c风格的变量吗 不一定是这样setValue forKey是否有替代方案 如果有可用
  • 如何检查 iPhone 的 IPv6 地址

    我已经根据苹果的建议设置了 IPv6 nat64 环境 https developer apple com library ios documentation NetworkingInternetWeb Conceptual Network
  • iOS 7 导航栏在 viewDidAppear 上跳跃/拉伸

    I am trying to update my app for iOS 7 When my views appear on the screen you can see that there is a gap between the na

随机推荐

  • 使用 dplyr::mutate 重新编码而不在函数中工作

    我正在尝试使用dplyr mutate across 重新编码 a 中的指定列tbl 单独使用它们效果很好 但我无法让它们在函数中工作 library dplyr library tidyr df1 lt tibble Q7 1 1 5 Q
  • elasticsearch,是否可以更新嵌套对象而不更新整个文档?

    我正在使用嵌套对象索引一组文档 将它们想象为论坛帖子 该嵌套对象是与该帖子相关的用户 我的问题是用户字段可能会更新 但由于帖子没有更改 因此它们不会重新索引 并且用户嵌套对象变得过时 有没有办法更新嵌套对象而无需再次重新索引整个文档 或者唯
  • 在android中将SQLite数据库导出到csv文件

    我正在尝试将 SQLite 数据作为目录中的 CSV 文件导出到 Android 中的 SD 卡 所以我尝试了下面的方法 显然它只显示打印出来的文本 数据库的第一个表日期 项目 金额 货币 在我的 DBHelper java 中 我定义了该
  • VTD-XML 似乎破坏了 XML 文档中的转义字符串

    我正在研究 XML 数据集 DrugBank 数据库可用 here http www drugbank ca downloads 其中某些字段包含转义的 XML 字符 例如 等 为了使问题更加具体 下面是一个示例场景
  • 取消 flatMap 可观察调用链

    我正在使用 Angular 5 和 rxjs 我正在拨打 2 次服务电话 其中一次取决于其他结果 我正在使用 flatMap 进行此操作 我还使用 takeUntil 以便我可以在任何给定点中止操作 我的代码如下所示 this myserv
  • 使用 clang-format 删除尾随空格

    正如标题所示 我试图使用 clang format 来删除文件的尾随空格 但我找不到相关的选项名称 有人能指出我显而易见的事情吗 clang format 会自动删除尾随空格 您可以通过例如测试这一点clang format style G
  • 支持 Hexagon Maps for .NET 的开源 2D 游戏引擎

    我找不到 2D 游戏引擎来为 net 创建六边形地图 我能找到的最好的是 Xconq http sourceforge net projects xconq http sourceforge net projects xconq 和pyga
  • “django.core.exceptions.ValidationError”错误

    我正在 Django 中编写一个简单的游戏 所有的事情都是正确的 但是突然 我遇到了以下错误 Django v 1 7 Python v 3 4 我不知道这些代码有什么问题 test alireza alireza test test1 p
  • 关于并发修改异常[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 您能否告诉我 是否有任何方法可以在单
  • 由于 Google Analytics,PageSpeed Insights 99/100 - 如何缓存 GA?

    我正在努力使 PageSpeed 达到 100 100 而且我已经快到了 我正在尝试找到一个好的解决方案来缓存 Google Analytics 这是我收到的消息 利用浏览器缓存 在静态资源的 HTTP 标头中设置到期日期或最长期限会指示浏
  • 信标已注册,但响应表明 UID 错误

    我使用成功注册了一个信标谷歌邻近API https developers google com beacons proximity guides hl en但响应指示不同的 UID 请求网址https proximitybeacon goo
  • “foreach”并行循环返回 s

    我正在尝试并行处理多个列表项 我的目标是 根据每列的值运行一些标签函数 然后返回带有节点名称 列名称和处理后的标签的数据帧 使用普通的 for 循环 工作流程可以正常工作 但是 当我尝试在 foreach 循环中执行相同的操作时 返回的结果
  • 对于 Haskell 的 QuickCheck,什么是收缩?

    我正在学习 QuickCheck gt 2 6 的诀窍 但我不明白什么是心理医生 从看类型签名 http hackage haskell org packages archive QuickCheck 2 6 doc html Test Q
  • 如何在java中将方法调用作为后台进程

    在我的应用程序中 当用户登录时 我有这个逻辑 它将调用以下方法 并使用用户拥有的所有符号 public void sendSymbol String commaDelimitedSymbols try further logic catch
  • 将 Seq 与 Range 进行模式匹配

    考虑一段代码 def foo xs Seq Int xs match case Nil gt empty list case head Nil gt one element list case head tail gt s head is
  • 点 -> 像素 iText (im)精度

    好的 这是一些代码 pdfDocument is a com itextpdf text Document PdfPTable table new PdfPTable 1 PdfPCell cell new PdfPCell cell se
  • 库存推文、文本挖掘、表情符号错误

    我希望您能够协助进行文本挖掘练习 我对 AAPL 推文感兴趣 并且能够从 API 中提取 500 条推文 我自己克服了几个障碍 但最后一部分需要帮助 由于某种原因 tm 包没有删除停用词 您能看一下可能是什么问题吗 表情符号会引起问题吗 绘
  • 在 FragmentStatePagerAdapter 中保存状态和恢复状态

    我正在使用ViewPager with FragmentStatePageAdapter我的屏幕上有 5 个页面 其中有大量图像和视图 目前我有mViewPager setOffscreenPageLimit 1 所以只有当前 上一个和下一
  • 如何准备图像分类的训练数据

    我是机器学习新手 在图像分类方面遇到一些问题 使用简单的分类器技术 K 最近邻居 我试图区分猫和狗 到目前为止我的代码 import pandas as pd import numpy as np import seaborn as sns
  • alloc 和 init 他们实际做了什么

    有人可以向我解释一下 init 和 alloc 在 Obj C 中的作用吗 我正在阅读这本 obj c 书 其中给出了创建对象的示例 但它并没有真正详细介绍它的作用 alloc返回什么 init 返回什么 Animal k Animal a