Objective C - 分配、复制、保留

2023-11-29

我是 Objective C 的新手。我有 C 的基础知识,包括指针的概念。我有两个基本问题:

  1. 有人可以用一些类比来解释分配、复制和保留之间的区别吗?
  2. 如何处理返回指针变量的函数,以及如何通过返回指针执行消息传递?

更改文档的更新答案

这些信息现在分布在文档中的多个指南中。以下是所需阅读的列表:

  • 可可核心能力:申报财产
  • 使用 Objective-C 编程:封装数据
  • 过渡到 ARC 发行说明
  • 高级内存管理编程指南
  • Objective-C 运行时编程指南:声明的属性

现在这个问题的答案完全取决于您是否使用 ARC 管理的应用程序(新项目的现代默认设置)或强制手动内存管理。

分配与弱 - Use assign将属性的指针设置为对象的地址,而不保留它或以其他方式管理它;使用weak如果分配给它的对象被释放,则属性自动指向 nil。大多数情况下你会想要使用weak所以你不会尝试访问已释放的对象(非法访问内存地址 - ”EXC_BAD_ACCESS") 如果您没有进行适当的清理。

保留与复制- 声明的属性使用retain默认情况下(因此您可以完全忽略它),并且无论另一个对象被分配给该属性还是将其设置为 nil,都会自动管理对象的引用计数;使用copy自动发送新分配的对象a-copy消息(这将创建传递对象的副本,并将该副本分配给属性 - 在某些情况下很有用(甚至是必需的),在这些情况下,分配的对象在设置为其他对象的属性后可能会被修改(这意味着修改/突变也适用于该属性)。

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

Objective C - 分配、复制、保留 的相关文章

随机推荐

  • C++ 中的动态数组

    我是 C 和编程新手 如果您能在 C 或 C 中动态调整数组大小方面获得一些帮助 我将不胜感激 ex 我需要将值存储到数组中 值可能会改变 设置 1 0 1 2 3 设置 2 0 1 2 3 4 设置 3 0 1 设置 4 0 所以我希望他
  • 将 Moles 与 DateTime 结合使用

    我开始在单元测试中使用 Moles 并且在文档方面遇到了一些困难 我想摩尔 DateTime Now 如果您查看旧的执行此操作的方法是添加对 mscorlib 的引用 然后为其添加一个存根文件 添加新项 gt 用于测试的存根和摩尔 用于测试
  • 每 30 秒执行一次代码

    我有一个服务器需要从其客户端收集信息 该信息是一个随机数 我将其存储到频率数组中 服务器应该告诉所有客户端最频繁的号码 但每隔 30 秒左右一次 发送该号码的客户端会断开连接 并为新的客户端腾出空间 因此 新的数字被添加到数组中 如何让服务
  • 普通图像存储还是 mySQL blob?

    我正在编写一个 php mysql 网络应用程序 它有点像一个博客平台 人们可以在其中上传图片并发布它们 存储这些图像的最佳方式是什么 将它们存储在文件夹中还是通过 BLOB 存储在 mySQL 表中 我问这个是因为我想要最简单的方法 让我
  • 如何使用 AngularJS 重定向到另一个页面?

    我正在使用 ajax 调用来执行服务文件中的功能 如果响应成功 我想将页面重定向到另一个 url 目前 我正在通过纯 JS 代码执行此操作window location response message 但我需要用 AngularJS 代码
  • React Native 组件回调函数

    在组件中 我看到了执行回调的不同方式 有什么区别
  • Blazor 文本在插入后不会立即更改

    我有一个应用程序 用户可以在其中的某个位置插入文本 该文本显示在同一页面上的徽章上 我想要的是 当用户键入时 更改会立即显示在徽章中 我添加了一个 oninput 事件 但 oninput 事件似乎不会更新 razor 页面 因为当我有输入
  • 无法在关联方法上重复 NilClass

    我使用的是 Rails 2 3 5 和 ruby 1 8 7 我正在构建一个简单的 TODO 管理器 我有属于用户的任务 并且用户有许多任务 我在用着acts as taggable on steroids用于标记任务的插件和restful
  • 使用 ChartJS 堆叠浮动水平条

    我正在尝试实施堆叠水平浮动条 using ChartJS但我面临着一种不寻常的行为 有人可以帮忙为什么会发生这种情况吗 我正在使用的代码是
  • 忽略受密码保护的 Excel 文件[重复]

    这个问题在这里已经有答案了 我正在迭代一个充满 xlsx 文件的目录 我正在使用 VBA 打开它们并调整几列的大小 其中一些要求输入密码 我不知道 所以我只想跳过这些文件并转到下一个 在VBA中如何实现这一点 我尝试了以下方法 但没有这样的
  • 在 php facebook sdk 4.0.0 或更高版本中指定应用程序范围

    我正在使用 facebook 的新 php sdk gt 4 0 0 我试图找出在哪里指定scope我对图形 API 的请求 就像 我在哪里指定我想要publish actions这样用户就可以在登录时授权我这样做 In 这里的链接它说 您
  • 如何在 Unity 中序列化并保存游戏对象

    我有一个游戏 玩家拿起武器 然后将其作为 GameObject 变量放置给我的玩家 称为 MainHandWeapon 我试图通过场景更改来保存该武器 所以我试图保存它 我的处理方法如下 public class Player Manage
  • 使用 Requirejs 动态加载语言环境文件

    我有一个基于 RequireJS 构建的单页 Marionette 应用程序 需要支持翻译 我的目标是为每种语言提供一个字典文件 并根据登录用户的配置加载相关文件 由于大多数用户会使用英语 因此我想在构建过程中将英语词典捆绑到应用程序中 使
  • 使用查询字符串参数从 url 下载自定义设置

    我制作了一个 Windows 服务应用程序 我想创建一个安装文件 当用户通过我们的网站 URL 和查询参数请求应用程序时 例如 http test com setup exe id 1212 我需要将当前的 app config 键值更改为
  • 如何在自定义下拉功能区控件上设置所选项目

    我正在使用自定义 UI 编辑器为 Excel 创建一个自定义选项卡 其中有两个 DropDown 控件 我们将它们称为 DropDown1 和 DropDown2 我的目标是 每当我更改 DropDown1 选择时 它都会自动更改 Drop
  • 系统找不到启动 Ruby 和 Rails 命令提示符时指定的路径

    我一周前刚开始学习 Rails 直到今天一切正常 现在 当我启动 Ruby 命令提示符时 它会显示 The system cannot find the path specified Under Rails Environment Conf
  • 适用于所有浏览器的弹出框

    我目前正在使用 window open url blur window focus 但这只能在 Chrome 中正常工作 在 IE 中 窗口在加载完成后会重新出现 在 Firefox 中 窗口根本不会下降 别担心 这个弹出窗口不会令人厌烦
  • 来自非托管代码的 System.AccessViolationException?

    我正在编写这个库 它通过将由托管代码使用的媒体基础框架在 C CLI 中实现一些基本的音频播放器功能 我可以很好地播放音频 停止 暂停等 对于任何不熟悉 Media Foundation 的人 媒体会话都会发布您可以处理通知的事件 这是通过
  • 9 补丁可绘制行为糟糕,奇怪的人工制品 - 这里出了什么问题?

    所以我正在尝试 9 补丁图像 我从一个 PNG 文件开始 其中有一个带圆角的半透明正方形 然后 我创建了 9 patch 如下所示 注意顶部和左侧的小点 我认为这足以处理这个问题 但是当将这个 9 补丁添加到 Eclipse 时 我得到了奇
  • Objective C - 分配、复制、保留

    我是 Objective C 的新手 我有 C 的基础知识 包括指针的概念 我有两个基本问题 有人可以用一些类比来解释分配 复制和保留之间的区别吗 如何处理返回指针变量的函数 以及如何通过返回指针执行消息传递 更改文档的更新答案 这些信息现