属性与实例变量[重复]

2024-02-23

可能的重复:
Objective-c / cocoa / cocoa-touch 中的“实例变量”和“属性”之间有区别吗? https://stackoverflow.com/questions/843632/is-there-a-difference-between-an-instance-variable-and-a-property-in-objectiv

在 Objective C 中,您会想要使用实例变量还是属性,在什么情况下?有人可以提供一个现实生活中的例子吗?


实例变量对于类来说是唯一的。默认情况下,只有类和子类可以访问它。因此,作为面向对象编程的基本原则,实例变量 (ivars) 是私有的——它们由类封装。

相比之下,属性是公共值,可能对应也可能不对应于实例变量。如果你想公开一个 ivar,你可能会创建一个相应的属性。但同时,您希望保持私有的实例变量没有相应的属性,因此无法从类外部访问它们。您还可以拥有与 ivar 不对应的计算属性。

如果没有财产,ivars 可以被隐藏。事实上,除非在公共标头中声明 ivar,否则很难确定这样的 ivar 是否存在。

一个简单的比喻是一本收缩包装的书。属性可能是title, author或精装与平装。 “ivars”将是本书的实际内容。在您拥有这本书之前,您无法访问实际文本;除非您拥有该课程,否则您无权访问 ivars。


More interestingly, properties are better integrated into the runtime. Modern 64-bit runtimes will generate an ivar for accessor properties, so you don't even need to create the ivar. Properties are in fact methods:
// This is not syntactically correct but gets the meaning across
(self.variable) == ([self variable];)
(self.variable = 5;) == ([self setVariable:5];)

对于每个属性,都有两个方法(除非该属性被声明为readonly,在这种情况下只有一个):有getter,它返回与 ivar 相同的类型,并且与 ivar 具有相同的名称,以及setter(没有用readonly伊瓦尔);它返回 void 并且它的名字很简单set添加到变量名前面。

因为它们是方法,所以您可以动态调用它们。使用NSSelectorFromString() http://www.cocoadev.com/index.pl?NSSelectorFromString以及各种performSelector: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html方法,您可以制作一个具有多种可能性的非常动态的程序。

最后,属性在核心数据中被广泛使用键值编码 http://cupsofcocoa.wordpress.com/2011/05/09/objective-c-lesson-13-key-value-coding/。 Core Data 是一个先进的框架,用于在 SQLite 数据库中存储数据,同时提供清晰的 Obj-C 前端; KVC 在整个 Core Data 中使用,是一种访问属性的动态方式。它在编码/解码对象时使用,例如从 XIB 读取时。

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

属性与实例变量[重复] 的相关文章

  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • Objective-C 中是否有命名初始化方法的约定?

    在可以通过不同的 init 方法初始化的 Objective C 类中 将所有初始化程序共用的初始化代码收集到一个从其他 init 方法 有时也从从 Nib 唤醒 是否有关于如何命名该方法的约定 初始化器 初始化公共 根据 Apple 的说
  • 添加/删除带有动画的 UITableViewCell?

    我知道这听起来像是一个愚蠢的问题 但我到处都看过 我怎样才能做到这一点 我知道如何使用 swype to delete 方法来执行此操作 但是我如何在该函数之外执行此操作 请发布一些代码示例 Thanks Coulton self tabl
  • iPhone/Objective-C - 呈现视图和委托时的 UIDocumentInteractionController 类参考

    我在用UIDocumentInteractionController在我的应用程序中 以便在我的应用程序中呈现 Instagram 过滤器屏幕 如下所述 http instagram com developer iphone hooks h
  • Objective-C:int值无故改变

    Objective C 我需要帮助保留 int 的值 无需我的命令 它就在我身上发生变化 最初的问题是 如何声明和保留 int 这在另一篇文章中得到了满足 Objective C 如何声明和保留 int https stackoverflo
  • 将 UIButton 中的图像缩放到 AspectFit?

    我想将图像添加到 UIButton 并且还想缩放图像以适合 UIButton 使图像变小 请告诉我该怎么做 这是我尝试过的 但它不起作用 将图像添加到按钮并使用setContentMode self itemImageButton setI
  • DatePicker 停止 CoreData 按预期工作

    我有一个应用程序 它保存 UIDatePicker 中的文本和日期 然后在您回到 UIDatePicker 中的该日期时显示该注释 效果很好 只有我发现将 UIDatePicker 日期设置为今天会停止 CoreData 工作 只有当我运行
  • iPhone UINavigationBar 使用 [UINavigationBar 外观] 更改所有控制器的字体样式

    我知道我可以单独更改导航栏的字体 如本答案所述 更改导航栏的字体 https stackoverflow com questions 5832036 change the navigation bars font 目前我正在使用一种更全局的
  • 推入 UINavigationController 时隐藏 FBFriendPickerViewController 导航栏

    介绍一个实例FBFriendPickerViewController using presentViewController animated completion 非常简单 该类似乎是针对该用例的 但是 我想推送一个实例FBFriendP
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • 在 UIImage 顶部绘制透明圆圈 - iPhone SDK

    我在尝试找出如何在 UIImageView 中的 UIImage 顶部绘制透明圆圈时遇到了很多麻烦 谷歌给了我线索 但我仍然找不到有效的例子 有没有人知道的例子可以证明这一点 最简单的方法就是创建一个半透明的方形 UIView 然后将其图层
  • Swift 闭包作为 AnyObject

    我尝试使用这个方法 class addMethod 在 Obj c 中使用如下 class addMethod self class selector eventHandler imp implementationWithBlock han
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • 如何在 UICollectionView 的节标题中动态添加标签和按钮?

    请帮助我如何水平添加标签和水平添加类似的按钮 但每个按钮应像另一个部分一样在每个标签的下方对齐 这应该在 UICollectionView 的标题中动态发生 因为标签和按钮的数量根据我的数据 我想制作一种 Excel 类型的布局 并在标题中
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 是什么导致了这个 iPhone 崩溃日志?

    我有点卡住了 需要解决这个问题 因为我的一个应用程序出现了随机崩溃 而这些崩溃并不总是能够重现 这是崩溃日志之一 Incident Identifier 59865612 9F00 44EA 9474 2BF607AD662E CrashR
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • iOS中的performSelector有什么用

    的作用是什么执行选择器 比较 self btnClicked and self performSelector selector btnClicked void btnClicked NSLog Method Called 两者都对我来说工
  • 避免“在此块中强烈捕获自身可能会导致保留周期”消息

    每次我必须在块内使用全局变量或属性时 如下所示 self save if isItSaving NO self saveMyFile 我必须像这样重写 BOOL iis isItSaving id myself self self save
  • 使用 Storyboard 时获取 NSManagedObjectContext

    目标是获取当前的 NSManagedObjectContext 以便使用 Core Data 在 iOS 4 3 中 我将 UINavigationController 的委托设置为 AppDelegate 如下所示 在 AppDelega

随机推荐

  • 单击按钮时以特殊顺序保存数据

    我创建了一个应用程序 用户可以在其中添加一些注释到特定的car 在我的例子中 用户必须能够添加评论并对汽车进行评分 const App gt const state setState useState visible false const
  • sveltekit 中的 SPA / SSR

    我有一个页面 categories 在里面load函数来自 categories page server js我通过加载类别data来自数据库作为 JSON 对象 我将它们显示在 categories page svelte作为一个列表 当
  • 关联词的邻近度

    假设我有一段大约一段时间的对话文本记录 1小时 我想知道哪些词彼此相邻 我将使用什么类型的统计技术来确定哪些单词聚集在一起以及它们彼此之间的接近程度如何 我怀疑某种聚类分析或主成分分析 要确定单词的邻近度 您必须构建一个图表 每个单词都是一
  • 找不到“RdlCompile”任务

    我正在尝试使用 rldc 文件进行编译和项目 但出现以下两个错误之一 无法从程序集 Microsoft ReportViewer Common Version 10 0 0 0 Culture neutral PublicKeyToken
  • Qt:使TableView的宽度适合内容的宽度

    我有一个窗口 其中包含QTableView which 栏目根据内容进行调整并且是宽度固定 The QTableView嵌套在一个QWidget依次嵌套在QScrollArea依次嵌套在tabbed QMdiArea哪一个是centralW
  • 如何在 GWT 中解析大数据 (XML)

    在我的 GWT 应用程序中 我从 REST 服务器检索 XML 数据 我正在使用 Piriti XML 解析器https code google com p piriti wiki Xml https code google com p p
  • 派生类型不会发布给 MassTransit 中的消费者

    我在发布派生类型的通用消息以及使用 MassTransit v2 8 0 调用处理程序时遇到问题 如果我发布一条类型的消息HtmlBlockNewMessage 消费者永远不会被调用 如果我发布一个ServiceBusMessage反对并改
  • 如何在 Xcode 5 中自动增加内部版本号[重复]

    这个问题在这里已经有答案了 我想知道 Xcode 5 是否提供了一个设置来自动计算项目导航器 身份 部分中 常规 下找到的内部版本号 但据我所知 您仍然需要使用 PlistBuddy 通过脚本来完成此操作 一种简单的解决方案是增加 Xcod
  • 如何在vb.net中的控件名称中连接变量整数

    现在我有一个数据库并提取该数据并将其显示为表单 我有一系列组框和单选按钮 在每个组框 groupbox1 groupbox2等 中有2个单选按钮 即rdbtn1Yes和rdbtn1No 然后它在下一个 Groupbox 中增加 1 现在我用
  • ReactNative 自定义端口支持 run-android 命令,McAfee 解决方法

    我正在尝试为 Windows 配置 React Native 以进行 Android 应用程序开发 但我无法使用端口 8081 因为我的笔记本电脑上的 McAfee 代理使用该端口 我能够在不同的端口 8090 上启动节点js服务器 rea
  • Unity 中的单例每次调用上下文(Web 请求)

    几天前 我遇到了 ASP Net 线程的问题 我希望每个网络请求都有一个单例对象 我实际上需要这个来完成我的工作单位 我想为每个 Web 请求实例化一个工作单元 以便身份映射在整个请求过程中都有效 这样我就可以使用 IoC 将我自己的 IU
  • 线性排序算法

    我是研究算法的新手 我也不是计算机科学毕业生 然而 在阅读线性排序非比较算法时 我可以理解基数排序是计数排序的扩展 我不清楚的是计数排序的局限性 当计数排序似乎可以满足我需要避免 O n logn 比较的目的时 为什么我要选择基数排序 这确
  • AWS CDK 突然失败,Construct 无法转换为 InterfaceVpcEndpoint 类

    截至昨天我的cdk代码开始返回错误 java lang ClassCastException 类 software constructs Construct 无法转换为类 software amazon awscdk services ec
  • 当尝试运行以生成报告并在 Maven 项目中发送电子邮件时,缺少必需的类:org/codehaus/gmaven/mojo/GroovyMojo

    我有 Maven JUnit 项目 它可以成功编译 构建和测试 另外 当我做mvn site所有测试均成功运行并生成surefire report target site 目录 现在 我需要将此报告通过电子邮件发送给指定的收件人 这是我的
  • Sinatra 不会在 Chrome 上通过重定向保持会话

    Sinatra 不会通过 Chrome 上的重定向来保留我的会话 它正在创建一个全新的会话 而我正在丢失以前的所有会话数据 举个例子 类似于西纳特拉文档 http www sinatrarb com intro Browser 20Redi
  • Javascript - 需要在 setInterval 函数之外使用clearInterval

    基本上 我拥有的是函数内的 setInterval 我想做的是 从外部控制它的行为 这就是我所拥有的 function wheee var i 1 slideee setInterval function sliderContent sty
  • 如何将字节数组转换为 NSString

    我正在从 TCP IP 流读取数据 并成功从预先存在的服务器接收字节数组 我现在正在尝试找到一种方法将该数组转换为NSString 我找到了几个例子 但很难得到我想要的结果 NSData data NSMutableData alloc i
  • npm本地安装

    过去 当我使用 npm gt 1 0 安装软件包时 它们会在本地安装 但现在不再了 我的设置 首先我使用nvm https github com creationix nvm安装node js 我的操作系统 alfred alfred la
  • 检测存在哪些 Unicode 字形?

    JavaScript CSS web 中有没有办法检测系统是否具有某个 Unicode 字符的有效字形 例如 我想检测某种语言中的某个字符是否显示为方框 因为用户没有显示这些 Unicode 点的字体 或者他们是否确实会看到这些字符 这里描
  • 属性与实例变量[重复]

    这个问题在这里已经有答案了 可能的重复 Objective c cocoa cocoa touch 中的 实例变量 和 属性 之间有区别吗 https stackoverflow com questions 843632 is there