Objective C 的 self 和 C++ 的 this 之间的区别?

2024-06-28

有人能区分 Objective C 的 self 和 C++ 的 this 指针吗?


主要区别在于this是一个关键字,而self是一个变量。这样做的结果是,虽然this always指正在执行特定方法的对象,Objective-C 方法可以自由修改self执行期间。这有时被构造函数使用,它设置self = nil失败时。

这样做的原因是:

  • 这样子类(将初始化器与self = [super init])可以看到初始化何时失败,并且知道不要在自己的初始化程序中继续进行。
  • 组合对象可以看到失败并知道它们没有有效的组件。

一些初始化器会设置self到另一个不同但有效的对象。这可以在类集群中使用,其中“抽象”类可以在构建初始化对象时生成临时实例,但最终根据构建期间构建的属性返回不同的对象。

此外,这意味着您可以使用变量名执行一些常见的操作,这些操作会让每个人都感到困惑,而使用关键字则无法执行此操作,例如定义一个具有相同名称的更局部的变量self在代码块中。

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

Objective C 的 self 和 C++ 的 this 之间的区别? 的相关文章

  • 替换大字符串中的多个字符串的最快方法

    我正在寻找替换大 1mb 字符串的多个 500 子字符串的最快方法 无论我尝试过什么 String Replace 似乎都是最快的方法 我只关心最快的方式 不是代码的可读性 可维护性等 我不在乎是否需要使用不安全的代码或预处理原始字符串 每
  • 如何使用 lstat() 确定是否为硬链接

    我的操作系统是linux 我用 C 编程 我知道我可以使用 lstat 来识别软链接 即使用 S ISLNK st st mode 但我如何识别该链接是硬链接呢 如果链接是硬链接 它将被视为常规文件 但是 我还想区分常规文件和硬链接 有什么
  • 如何使用仿函数作为类模板中的成员?

    我试图使用函子作为std function类模板内的对象 以下是我到目前为止所做的事情 the functor class template template
  • 错误:调用 Configuration.BuildSessionFactory() 时“无法同时获取多个包”;

    升级到 NHibernate 2 1 后 我们收到此错误 QueryException Cannot simultaneously fetch multiple bags NHibernate Loader BasicLoader Post
  • 如何向 Iron Python 添加模块?

    我一直在尝试使用 C Visual Studio 执行以下 Python 代码 graphcreater py 我通过 NuGet 包管理器添加了 IronPyton 2 7 7 和 IronPython StdLib 2 7 7 一旦我运
  • C++ 局部变量销毁顺序

    C 11 中是否存在局部变量释放的定义顺序 更简洁地说 同一作用域中两个局部变量的析构函数的副作用将以什么顺序变得可见 e g struct X X do something int main X x1 X x2 return 0 Is x
  • Unix 编程。不确定如何使用 passwd 结构

    我做了一些研究 但仍在努力解决passwd结构 http www opengroup org onlinepubs 000095399 basedefs pwd h html http www opengroup org onlinepub
  • 带和不带指针声明符的 C++11 自动声明

    不同类型有什么区别bar1 and bar2 int foo 10 auto bar1 foo auto bar2 foo If both bar1 and bar2 are int 编写指针声明符是否有意义 在里面bar2宣言 这些声明完
  • 在 UserControl C# .NET 中添加/停靠控件

    我正在编写一个 UserControl 它以编程方式添加子控件 目前我正在添加新的控件 如下所示 this Controls Add new Control Height 16 Dock DockStyle Top 我遇到的问题是新控件添加
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • “#include ”导致“错误:asm/io.h:没有这样的文件或目录”

    我正在使用 gentoo 并尝试编译一个程序来控制并行端口上的位 它的顶部附近有这一行 include
  • 检测非 DPI 感知应用程序是否已扩展/虚拟化

    我正在尝试在 WinForms 应用程序中检测它是否由于操作系统具有高 DPI 而以缩放 虚拟化模式启动 目前 在以 3840x2400 缩放 200 缩放运行的系统中 应用程序将分辨率视为 1920x1200 DPI 为 96 缩放因子为
  • 使用 C# winforms 与 Windows 中的其他桌面应用程序交互

    我想知道是否可以与使用我的程序的其他程序进行交互 例如 单击另一个程序上的按钮等 我不确定这是否可能 但如果可能的话 有人可以提供一些 C 示例代码 Thanks 您可以创建消息并将其发送到其他进程 为此 您必须在 C 代码中使用 P In
  • 在 QML 中使用 C++ 枚举作为字符串

    我想做的是在 C 中使用以下枚举 class MyClass public QQuickItem Q OBJECT Q PROPERTY MyEnum enumValue READ getEnumValue public enum MyEn
  • 难以访问在 Interface Builder .xib 文件中创建的 UITableViewCell

    在我的 UITableView 中 对于表格最后一部分的最后一行 我加载了一个特殊的 UITableViewCell 它与表格上的所有其他单元格不同 我在 xib 文件中创建了该单元 并为其指定了重用标识符 endCell 我认为我可以执行
  • MVC - 从视图调用控制器

    我是 MVC 新手 我正在使用 MVC 开发一个 Web 应用程序 该应用程序仅包含一个页面 所以在这个视图中我必须填充多个数据 假设应用程序是 新闻提要 应用程序 我需要填充最近的新闻 您喜欢的新闻 您朋友推荐的新闻等 那么我应该从视图到
  • 如何隐藏鼠标光标?

    我想问是否有人可以为我提供一个 C 代码 在其中我可以在按下特定键时隐藏 显示鼠标指针 我发现一些只为 TURBO C 编写的代码 它们都不能使用 dev c 甚至 Visual c 编译和运行 我尝试运行在 Dev C 中找到的代码 但我
  • 如何在控制台应用程序中创建事件循环/消息管道?

    我想创建一个注册了一些事件的控制台应用程序 问题是这些事件永远不会被触发 在这种特殊情况下Windows 窗体 http en wikipedia org wiki Windows Forms我应该调用的应用程序Application Ru
  • 我使用 difftime 的 c 函数有时会返回 65535

    我有一个函数 使用 difftime 来检测自通信心跳停止以来的时间 以秒为单位 该函数的运行速度可以达到每 50 毫秒一次 该函数似乎可以工作 除了偶尔返回 65535 之外 我可以将执行次数减少到每秒一次 因为 difftime 的返回
  • PerformSegueWithIdentifier 不会产生带有标识符错误的 Segue

    我很难让 PerformSegueWithIdentifier 正常工作 我不断得到 Receiver

随机推荐

  • 如何在 Tooltipster 工具提示中显示来自 jQuery Validate 插件的消息?

    我想使用工具提示插件 http calebjacob com tooltipster 显示由jQuery 验证插件 http docs jquery com Plugins Validation jQuery 验证插件 document r
  • 导出资源后偶尔出现空白帧 - AVExportSession

    这个问题有几个答案 但是我的情况有点不同 没有一个答案可以解决我的问题 客观的 我正在尝试添加一个慢动作ramp None
  • ON DELETE CASCADE 与 Symfony 和 Doctrine 的多对多关系

    我想要与 Symfony 和 Doctrine 建立简单的多对多关系 这实际上是一个单向的一对多关联 可以通过连接表映射为文档表明 http doctrine orm readthedocs org en latest reference
  • 添加适用于 Android 的 Google Cloud Messaging (FCM) - 注册流程

    几个星期以来 我一直在为 GCM 的实现而苦苦挣扎 但我真正想了解它是如何工作的 所以我决定采取 小步骤 首先 正如提到的here https developers google com cloud messaging registrati
  • 如何在php中显示curl的二进制数据

    我正在编写简单的 php 代理 但在显示 png 文件时遇到问题 输出是 它应该是 图像在 Notepad 中打开 我的 php 卷曲代码如下所示 ua Mozilla 5 0 Windows U Windows NT 5 1 en US
  • 表格的 元素中是否允许使用 ng-model?

    表格元素内是否允许使用 ng model 如果我更改特定列 即视图 角度会自动更新模型吗 如果您要使用 HTML 直接编辑表格单元格contenteditable属性 ng model 不会自动工作 因为默认情况下它仅适用于表单元素 有可能
  • C# 结构体中的引用类型

    我正在查看 C 中的类型值 并了解到它们不会像普通引用类型那样在堆上分配 如何分配具有引用类型的结构 e g struct simple public Employee e public bool topEmployee public vo
  • 在 Visual Studio 安装项目中安装后如何启动应用程序

    我已经使用 Visual Studio 2008 创建了一个安装项目 应用程序安装完成后 我希望它立即启动 关于如何做到这一点有什么想法吗 我使用脚本在 MSI 的最终形式上放置了 启动 ProductName 复选框 不过 我不能对剧本有
  • Hibernate注解

    我们应该在基于 Hibernate 的应用程序中使用 org hibernate annotations Entity 而不是 javax persistence Entity 吗 或者说没有这样的规则 org hibernate anno
  • 为 Android 离线(手动)安装 Intel x86 Atom 系统映像

    我想安装 Intel x86 Atom 系统映像 因为我的模拟器速度太慢 每次我尝试从 Android sdk 管理器安装它时 我都无法收到此消息 正在获取网址 https dl ssl google com android reposit
  • 如何可视化包含/指向彼此的 C 结构图?

    我正在使用Ubuntu 10 04 正在研究内核对象的编程 我遇到了一些相当复杂的结构 我很难阅读 所以我想我应该尝试找到一些可以帮助我可视化它们的工具 到目前为止我唯一能找到的是VCG http rw4 cs uni sb de sand
  • 在 Resharper 分析中忽略设计器和生成的文件

    我已经使用 Resharper 几天了 我真的很喜欢这个工具 但是有一件事让我很恼火 我想知道它是否可以改变 我从生成的代码中收到大量问题通知 我的项目中几乎有 1400 个 我想将这些文件设置为忽略 这样它们就不会像使用 StyleCop
  • 如何判断CoInitialize被调用了多少层?

    我正在对一个混乱的项目进行一些调试 之前的开发人员不知道他们在做什么 主要问题是尝试多线程应用程序失败 我现在正在清理混乱并试图找出问题出在哪里 问题之一是调用不一致CoInitialize为了使用ADO组件 继续我的上一个问题 https
  • 在 Android 应用程序中使用 GPS

    我目前正在研究在 Android 应用程序中使用 GPS 在 android 文档中我看到了以下行 LocationProvider locationProvider LocationManager NETWORK PROVIDER Or
  • ASP.net 角色和项目

    EDIT 重写了我原来的问题以提供更多信息 背景信息在我的工作中 我正在为客户开发 ASP Net Web 应用程序 在我们的实现中 我们使用诸如带有 MembershipProviders 和 RoleProviders 的表单身份验证之
  • ORA-12514: TNS: 侦听器当前不知道连接描述符中请求的服务

    我在尝试通过侦听器连接到 Oracle Database XE 时遇到问题 sqlplus system my password XE 我收到以下错误 ORA 12514 TNS listener does not currently kn
  • t-sql计算文本列中的唯一单词

    我有一列包含图像标题 我想做的是找到该栏中出现的最流行的单词 有没有办法用 t sql 来做到这一点 我认为你可以做这样的事情 我认为这不是最优化的 但您可以对其进行改进 创建一个表变量 t来存储单词 创建一个游标 循环浏览字幕表中的每一行
  • 将 WindowState 设置为最大化会导致窗口过早出现

    我读到Load事件应该在创建窗口句柄后触发 但是before窗口实际上变得可见 在大多数情况下 这似乎是正确的 但是 我发现当我使用以下命令创建表单时WindowState属性设置为FormWindowState Maximized 通过
  • 如何在 iOS 10 中安排本地通知(objective-c)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想使用 iOS 10 安排本地通知 我想知道如何执行此操作 我查遍了网络 但我一直在寻找仅用于注册和处理通知的线索 不适用于本地通知
  • Objective C 的 self 和 C++ 的 this 之间的区别?

    有人能区分 Objective C 的 self 和 C 的 this 指针吗 主要区别在于this是一个关键字 而self是一个变量 这样做的结果是 虽然this always指正在执行特定方法的对象 Objective C 方法可以自由