IBOutlet 应该是 ivars 还是属性?

2024-04-08

尽管我确信它们存在,但我很难找到或确定在 ViewController 中声明出口的官方最佳实践。

据我所知,有 3 个选项:

  1. 仅伊瓦尔
  2. 仅限财产
  3. 由 ivar 支持的财产

当前,当我尝试通过从 IB 拖入 ViewController 来自动生成属性时,Xcode 会崩溃,但根据我的记忆,这样做会创建一个没有 ivar 的属性。也可以拖入 ivar 部分,这将创建一个没有属性的 ivar。这表明苹果公司对纯房地产和纯 ivar 商店都表示满意。

因此,在 viewDidUnload 中,我们需要将 nil 分配给我们的任何一个出口,但是 dealloc 呢?如果我们使用了没有 ivar 的属性,假设我们不应该在 init 或 dealloc 中使用任何访问器,我们如何释放我们的输出口?

在我看来,允许我们在没有访问器的情况下释放我们的插座的唯一模式是使用由 ivar 支持的属性,因此我们可以在 dealloc 中手动释放我们的 ivar 而不使用其访问器,但是这是 Apple 的一个选项不支持代码生成。


根据经验,我通常为以下对象创建访问器IBOutlets.

在 ARC 或非 ARC 项目中我通常会执行以下操作:

//.h (ARC)
@property (nonatomic, weak) IBOutlet UILabel* myLabel;

//.h (non-ARC)
@property (nonatomic, retain) IBOutlet UILabel* myLabel;

//.m
@synthesize myLabel;

通过这种方式,您可以让编译器为您创建实例变量。但您也可以声明实例变量并告诉编译器使用它。

然后您可以在任何需要的地方使用该访问器/实例变量。

The 苹果内存管理指南 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html说你必须避免访问器方法init or dealloc当您有非 ARC 项目时的方法。因此,例如:

// (non-ARC)
- (void)dealloc
{
   [myLabel release]; myLabel = nil; // I'm using the instance variable here!
   [super dealloc];       
}

这在非 ARC 项目中非常重要。原因是,如果没有访问器,KVC 会将 nib 对象分配给实例变量,并在其上放置一个保留。如果您忘记释放它,则可能会出现内存泄漏。使用访问器会强制您在最后释放该对象。

我强烈建议阅读星期五-qa-2012-04-13-nib-内存管理 http://www.mikeash.com/pyblog/friday-qa-2012-04-13-nib-memory-management.html作者:迈克·阿什。这是一篇关于 nib 和内存管理的非常酷的文章。

希望能帮助到你。

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

IBOutlet 应该是 ivars 还是属性? 的相关文章

  • UITesting、XCTest 当前 ViewController 类

    简单的问题 我有一个按钮可以执行到下一个视图控制器的操作 我想写 UI XCTest 来告诉我它是否打开了我想要的视图控制器 UI 测试框架无法访问您的应用程序代码 这使得无法对实例进行类断言 你不能够directly告诉屏幕上的控制器的类
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • 如何组合两个 SwiftyJSON 对象

    我有一个 swiftyJSON 对象 例如 location http img http commentCount 0 timestamp 1432460217550 我希望能够向其附加另一个 swiftyJSON 对象 使其看起来像 lo
  • SceneKit unproject Z 文档解释?

    我正在经历一些 SceneKit 概念 而我试图在脑海中巩固的一个概念是 unprojectPoint 我知道该函数将获取 2D 中的一个点并返回 3D 中的一个点 因此具有正确的 Z 值 当我阅读文档时 我读到了以下内容 method u
  • 使用自动布局、IB 和字体大小时表头视图高度错误

    我正在尝试为我的 uiTableView 创建一个标题视图 不是节标题 我已经有了 我已经在界面生成器中设置了一个 XIB 所有的连接都已连接好并且运行良好 除了桌子没有给它足够的空间 我的问题是表格顶部与表格标题有一点重叠 我的 XIB
  • 使用 jQuery 更改 CSS 类属性

    有没有办法使用 jQuery 更改 CSS 类的属性 而不是元素属性 这是一个实际的例子 我有一个 div 类red red background red 我想转班级red背景属性 而不是具有类的元素red分配的背景 如果我用 jQuery
  • 如何为图层阴影不透明度设置动画?

    我有一个视图 我已将 LayerOpacity 设置为 1 theView layer shadowOpacity 1 0 当视图位于屏幕下方时 这看起来很好 当我将此视图向上移动以与另一个有阴影的视图齐平时 它们看起来不太好 有没有办法让
  • 如何解决 iOS 6 SDK 中的 hidesBottomBarWhenPushed 行为异常的问题?

    我遇到了中描述的相同问题这个 OpenRadar 问题 http www openradar me 14670329 正如那里所说 摘要 UIViewController的hidesBottomBarWhenPushed属性 对于使用 iO
  • 与新 Apple Music 应用程序中相同的动态状态栏

    是否可以动态着色statusBar这是在新的苹果音乐应用程序 Edit iOS 8 4 中的新 Apple Music 应用程序具有此功能 打开应用程序 选择并播放歌曲 状态栏为白色 向下滑动播放器控制器以查看 我的音乐 控制器 它有黑色状
  • 如何编辑应用程序包中的文件?

    在我的应用程序中 我从存储在捆绑资源中的 CSV 文件加载数据 但是 我希望能够在用户点击 更新 按钮时以编程方式更新此文件 有没有办法以编程方式更改应用程序包中的资源 这是我用来访问该文件的代码 NSString path NSBundl
  • 在 ios 版 Ionic 中接收 URL

    我正在使用离子框架 我正在尝试设置一种从另一个应用程序接收网址的方法 就像 您在浏览器中 单击共享 然后将链接发送到另一个应用程序 我的应用程序 我找到了这个cordova https stackoverflow com questions
  • iOS Swift 在后台下载大量小文件

    在我的应用程序中 我需要下载具有以下要求的文件 下载大量 例如 3000 个 小 PNG 文件 例如 5KB 逐个 如果应用程序在后台继续下载 如果图像下载失败 通常是因为互联网连接丢失 请等待 X 秒然后重试 如果失败Y次 则认为下载失败
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 更改 JSON.NET 序列化属性名称的方式

    如何更改 Newtonsoft JSON NET 序列化对象属性名称的方式 有几种方法 You can manually control how it serializes using the JsonTextWriter class ht
  • 访问 google reader 的 Endpoints API 时出错

    我正在尝试在iPhone APP中实现google reader 到目前为止我已经成功收到了sid and auth 当我尝试使用以下命令调用 Endpoints API 时 问题就出现了GET 这是代码 ASIHTTPRequest re
  • 将父控件的属性传递给子控件

    我正在为特定应用程序开发一组自定义控件 我想定义对于外观目的的控件集通用的属性 为了论证 让我们这样做CustomCtrl AccentColor 我想为我的 Windows 窗体定义相同的属性 即Form1 AccentColor当我更改
  • 如何在Sprite Kit中实现鼠标关节?

    我已经在 iOS 上用 Cocos2d Box2d 编写了拖放功能的工作实现 我需要将它移植到 Sprite Kit 逻辑非常基本 当用户触摸屏幕时 找到手指下的精灵 在找到的精灵和场景的物理体之间创建鼠标关节 将关节的目标设置为触摸位置
  • 检查 Objective-C 块类型?

    这主要是出于好奇 我不太确定它的实际用途是什么 但就这样吧 由于块也是 Objective C 对象 是否可以检查它们的类型 也就是说 它是否响应isKindOfClass 消息以及如何使用该消息来处理块 我天真的以为事情大概是这样的 vo
  • 在 UITableView 的部分标题文本下方添加一些边距

    我已经设计了标题文本的样式 func tableView tableView UITableView cellForRowAtIndexPath indexPath NSIndexPath gt UITableViewCell let ce
  • 在成为FirstResponder或resignFirstResponder的情况下将对象保持在键盘顶部?

    我目前在键盘顶部有一个 UITextField 当您点击它时 它应该粘在键盘顶部并平滑地向上移动 我不知道键盘的具体时长和动画类型 所以确实很坎坷 这是我所拥有的 theTextView resignFirstResponder UIVie

随机推荐

  • Redis部署配置-主从复制

    目前我有两台服务器 我已经部署了基于node js Express JS的Web服务API 我正在使用 Redis 来缓存 JSON 字符串 将此设置部署到生产中的最佳选择是什么 我懂了here https stackoverflow co
  • 删除 WPF ListView/GridView 高亮镶边

    我有 WPF ListView 和 GridView 视图 我想删除行突出显示的任何痕迹 这段有用的代码可以在该网站的一个答案中找到
  • Android:以编程方式从设备管理器中删除我的应用程序?

    我正在尝试向我的应用程序添加一个按钮以将其从设备管理员中删除 并使用下面的代码 但我的应用程序崩溃了 Code 单击按钮 ComponentName devAdminReceiver new ComponentName this DemoD
  • 将金额转换为 Python 印度格式的单词

    如何将印度语中的金额转换为单词 我正在使用 num2words 库 但它在呈现 十万 和 千万 时呈现错误的单词集 例如 num2words 903614 55 lang en IN 其印刷 nine hundred and three t
  • Kendo mvc grid 内联编辑模式 DateTimePicker 模板给出错误

    我正在使用 Kendo UI mvc 网格来列出数据 我正在这个网格中进行内联编辑 我使用 EditorTemplate 作为日期时间字段 这样它将在内联编辑模式下为日期时间字段提供日期时间选择器 当我要单击 更新 按钮时 它会给我这样的验
  • 将较小的矩形合并为较大的矩形

    我有一个问题 我需要将小正方形合并成更大的矩形 假设我有一个 2D 网格 其中填充了随机 1 和 0 1 0 1 1 0 1 0 1 1 1 0 1 0 1 1 0 1 0 1 1 0 0 1 0 0 1 代表已填充的区域 我将它们绘制为屏
  • 无法解析配置“:app:debugRuntimeClasspath”的所有文件

    我正在尝试构建颤振应用程序 之前运行正常 但突然出现此错误 Execution failed for task app checkDebugAarMetadata gt Could not resolve all files for con
  • 如何控制 UISearchDisplayController 的 searchResultsTableView?

    我想知道如何控制所使用的表视图UISearchDisplayController 你不能覆盖searchResultsTableView的财产UISearchDisplayController 因为它是一个只读财产 我尝试过覆盖search
  • 如何使用 WiX 设置服务的恢复选项?

    我有以下 wxs 文件
  • 为什么发送电子邮件需要多个邮件服务器跃点?

    当我向某人发送电子邮件时 我认为 我的电子邮件被发送到我的家庭服务器 然后电子邮件被发送到目标服务器 最后被发送到我想要发送给的人 有时 这需要多次跳跃 这是让我困惑的一点 为什么这需要多跳 为什么邮件不能直接发送到目标服务器 例如 XMP
  • iPhone 的精灵表生成器? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 到目前为止 我一直在制作自己的 1024 1024 精灵表 将图像放置在 64 x 64 网格中 以帮助轻松识别每个精灵的位置和大小 不用
  • Google 地图 - 从 ROADMAP 中删除网格

    I m integrating the google map in my site It works fine However it shows grid like this 我想删除它以使地图更美观 任何人都知道如何删除它 Thanks
  • 如何使用 JPA CriteriaBuilder 查询执行外连接?

    我正在使用 JPA 2 0 Hibernate 4 1 0 Final 和 MySQL 5 5 27 我想构造一个 JPA 查询 每行返回两个实体 并且我想执行右外连接 这两个实体是 Entity Table name user uniqu
  • 无法从 Dropbox 检索图像

    你好 我有一个图像滑块 当我尝试从服务器检索图像时 图像会正确显示 http stthomasmountmtc org index html http stthomasmountmtc org index html 但是 当我尝试从 Dro
  • 我无法在 .NET MAUI 中显示带下划线的条目

    我曾在 Xamarin 平台工作过 现在正在学习 NET MAUI 尽管有很多相似之处 但我面临着某些问题 我无法按照 NET MAUI 文档声明的方式在 Android 设备上显示基本的输入控件 以下是输入字段的代码片段
  • C++ 和其他语言有小提琴类型的东西吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我记得曾经见过一个 jsfiddle 类型的东西 在线编译器 您可以在其中指定语言 c c asm 以及
  • 辅助阅读将列表视图中的项目显示为列表项 + 标题视图

    我正在自定义下拉刷新列表视图中实现可访问性 我的下拉刷新列表视图有一个标题视图 用于在下拉时显示更新状态 如果我的列表仅包含 5 个项目 Talkback 将其读取为 显示第 1 项 共 6 项 而不是 显示第 1 项 共 5 项 我认为总
  • 我们为什么使用 ViewModel?

    我最近开始担任网络开发人员 我使用 ASP NET MVC 4 和 NHibernate 在我的工作场所 我们严格要求使用视图模型在控制器和视图之间来回传输数据 并且视图模型不应包含模型的任何对象 我知道它是控制器和视图之间的一层 但我发现
  • 安卓。 Facebook 分享对话框在 Android 6.0+ 上立即关闭

    我正在尝试通过 Facebook 共享对话框共享图像 这是代码 private void startFacebookShare SharePhoto photo new SharePhoto Builder setBitmap getCap
  • IBOutlet 应该是 ivars 还是属性?

    尽管我确信它们存在 但我很难找到或确定在 ViewController 中声明出口的官方最佳实践 据我所知 有 3 个选项 仅伊瓦尔 仅限财产 由 ivar 支持的财产 当前 当我尝试通过从 IB 拖入 ViewController 来自动