IBOutlet 是否需要是一个属性并被合成?

2023-12-23

在大多数示例中,我看到 IBOutlet 的以下设置:



(Example A)

FooController.h:

@interface FooController : UIViewController {
    UILabel *fooLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *fooLabel;

@end

FooController.m:

@implementation FooController

@synthesize fooLabel;

@end

但这也很好(注意:没有属性也没有合成):



(Example B)

FooController.h:

@interface FooController : UIViewController {
    IBOutlet UILabel *fooLabel;
}

@end

FooController.m:

@implementation FooController

@end

像示例 B 中那样定义 IBOutlet 是否有任何缺点?比如内存泄漏?似乎工作正常,我更喜欢不将 IBOutlet 公开为公共属性,因为它们不这样使用,它们仅在控制器实现中使用。在没有真正需要的情况下在三个地方定义它并不让我觉得很干燥(不要重复自己)。


在 Mac OS X 上,IBOutlet 的连接方式如下:

  1. 查找名为 set: 的方法。如果存在就调用它。
  2. 如果不存在方法,则查找名为 的实例变量,并设置它不保留.

在 iPhone 操作系统上,IBOutlet 的连接方式如下:

  1. 调用 [object setValue:outletValue forKey:@""]

为键设置值的行为是执行以下操作:

  1. 查找名为 set: 的方法。如果存在就调用它。
  2. 如果不存在方法,则查找名为 的实例变量,设置它并retain it.

如果你使用房产,你就会陷入“查找名为 set:... 的方法“两个平台上的情况都是如此。如果您只使用实例变量,那么在 Mac OS X 和 iPhone OS 上您将有不同的保留/释放行为。使用实例变量没有任何问题,您只需要处理这种差异在平台之间切换时的行为。

这是有关此主题的完整文档的链接。https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW6 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW6

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

IBOutlet 是否需要是一个属性并被合成? 的相关文章

  • 更新 ios 和 xcode 后部署时出现错误“Xcode 无法找到安装此版本的软件映像”

    我不断收到错误 部署时 Xcode 找不到安装此版本的软件映像 我将 iPhone 升级到了 6 1 3 版本 最近也将 xcode 更新到了最新版本 在此之前 我可以将应用程序部署到手机 但现在我的应用程序无法部署到我的设备 我是否必须重
  • Corona、Phonegap、Titanium 之间的比较

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我是一名 Web 开发人员 我想将我的 Web 产品迁移到 iPhone 其中一款产品就像Go
  • 将 NSString 分成行(以适合所需的宽度)

    我正在尝试将 NSString 分成几行以适合所需的宽度 因为它会发生在内部 sizeWithFont constrainedToSize 有没有比猜测中断发生在哪里更好的方法呢 sizeWithFont If NSLayoutManage
  • 带有徽章编号的 UISegmentedControl

    就像标签栏一样 我想在其上显示徽章UISegmentedControl 因为我看不到任何预定义的方法UISegmentedControl就像可用于UITabBar 我考虑过将徽章作为图像添加到其顶部 但也许有更好的方法 Here https
  • 将 UIWebView 标题发送到 UINavigationBar

    我正在尝试将 UIWebView 页面标题发送到 UINavigationBar 如果用户单击链接 UINavigationBar 显示后退按钮 但如果在主页上隐藏后退按钮 我也希望如此 要将标题页检索到 UIWebView 中 您可以使用
  • 重构函数错误 - “不是此工作区中 Xcode 3 项目中任何目标的构建阶段的一部分,因此无法重构”

    尝试通过 XCode 4 1 中类别的 h 文件中的 refactor gt rename 按钮重命名函数的名称 我收到此错误 错误和正文 UINavigationController ZG h 不属于此工作区中 Xcode 3 项目中任何
  • iPhone开发中如何制作画线动画?

    我一直在四处寻找 但对于这个简单的问题似乎没有好的答案 所以我再次问 如何在 iphone dev 中制作线条画动画 基本上我想要的是这样的 implementation MyUIView void triggerLineDrawing C
  • XCode 4.2 停止界面生成器自动缩放

    每当我更改所选控件时 有什么方法可以阻止 XCode 4 中的 IB 缩放以尝试填充屏幕 尝试在 1440x900 笔记本电脑屏幕上开发 iPad 故事板让我抓狂 这使得在屏幕上放置大块几乎是不可能的 有谁知道一些隐藏的偏好迫使 XCode
  • iphone / css - 单击时如何防止项目上出现黑色半透明覆盖

    我正在编写一个移动网站 在 iPhone 中 当您触摸 按住可点击项目时 图像顶部会出现明显的半透明黑色覆盖层 有人经历过这个吗 我该如何摆脱它 有没有办法用css 这是我的代码 childLink div class option div
  • 如何使用 cocos2d 在 iphone 应用程序中使用 MYSQL 数据库连接?

    我正在做一个项目 我需要连接MYSQL数据库 我在我的项目中成功连接SQLite 使用cocos2d 但是我无法在我的项目中连接MYSQL数据库 我任何人都喜欢这个而不是帮助我如何连接 给我必要的信息 您将无法直接从 iPhone 连接到
  • 重新排序单元格后重新加载自定义 UITableViewCell

    I have UITableView它使用自定义UITableViewCells 单元格可以具有三种类型的背景图像之一 在每个单元格的 backgroundView image属性 顶部 中间或底部 顶部和底部图像用于第一个和最后一个单元格
  • 在 ARC 中异步生成 CGImagesForTimes

    如果我在启用了 ARC 的项目中运行以下命令 则完成处理程序永远不会触发 但如果没有 ARC 它会按预期工作 我在这里缺少什么 NSURL url NSURL URLWithString http media w3 org 2010 05
  • 解决听写/自定义文本视图错误

    我有一个实现的视图UIKeyInput并覆盖shouldBecomeFirstResponder回来YES 点击此视图时 键盘会弹出 如果用户点击听写按钮 按下 完成 然后尝试关闭键盘 应用程序将崩溃并显示 Fatal Exception
  • 取消按钮和 UIActionSheet 的问题

    如何确定 UIActionSheet 上的取消按钮是否被按下 我的 UIActionSheet 设置如下 IBAction fileButtonPressed UIActionSheet mymenu UIActionSheet alloc
  • 如何为带有标题图像的移动设备设置 HTML,该图像占据浏览器的整个宽度?

    我担心的是我必须为移动设备建立一个网站 概念中是将图像设置为标题 现在的问题是 不同的智能手机具有不同的显示分辨率 有例如840x560 480x320 或 800x480 我必须编写什么元标签 CSS 等才能使 每个 现代智能手机中的图像
  • scrollToRowAtIndexPath:atScrollPosition:动画滚动太慢

    基于分页 UIScrollView 的页面更改 我正在调用scrollToRowAtIndexPath atScrollPosition animated到所显示的该页面的表详细信息 void scrollViewDidScroll UIS
  • 在 iPhone 和 Cocos2d 中从类类型(+)方法访问对象?

    我有一个类方法 在其中创建并返回类对象 但我想访问同一类中该对象的某些属性 作为一个类方法 我无法在 h 文件中声明该变量 然后在其他方法中访问它 以下是代码 我如何在下面的实例方法中访问 backsprite 或 hudlayer 对象的
  • 标签中的文字大小

    如何限制标签中的字符数 您可以通过设置自动截断带有省略号的文本frame of the UILabel NSInteger newSize 10 label frame CGRectMake label frame origin x lab
  • 拦截传入短信

    我想知道拦截短信的选项有哪些 我希望能够在收到短信时启动一些代码来处理短信 任何关于这在技术上是否可行以及如果有不止一种方法我有什么选择的建议 将不胜感激 谢谢 保罗 由于您有如此多的标签 因此很难判断您实际上是为哪个操作系统开发的 在 i
  • 如何获取 UITableView 内容视图的大小?

    我想在填充表格时获取 UITableView 内容视图的大小 关于如何执行此操作有什么建议吗 Allows you to perform layout before the drawing cycle happens layoutIfNee

随机推荐

  • GWT (2.4.0) + XSRF

    我一直在尝试让 XSRF 在网络应用程序上运行 但没有成功 我正在研究一个典型的登录实现 我正在关注谷歌的代码 https developers google com web toolkit doc latest DevGuideSecur
  • 向工人发送数据

    我正在尝试创建一段并行代码来加速非常大 几亿行 数组的处理 为了并行化 我将数据切成 8 个 我的核心数 块 并尝试向每个工作人员发送 1 个块 然而 看看我的 RAM 使用情况 似乎每一块都发送给每个工作人员 有效地将我的 RAM 使用量
  • ServiceStack OnDeserialized 等效项

    我正在实时反序列化 websocket 消息 在我收到的消息 json 字符串 中 有一个 unix 时间戳 长 一旦每个对象被反序列化 我就需要它尽快调用一个方法 以便我可以捕获消息发送和接收时间之间的延迟 使用 Json NET 这很简
  • 如何对字典(在运行时)进行类型提示/类型检查以查找任意数量的任意键/值对?

    我定义一个类如下 from numbers import Number from typing import Dict from typeguard import typechecked Data Dict str Number typec
  • 缓慢/跳跃地调整大小

    我使用简单的渐变扩展 JComponent 并调整 PaintComponent 方法制作了自己的 BottomBar 然后我将它添加到使用 BorderLayout 的 JFrame 的南部 一切一开始看起来都是正确的 当我调整框架大小时
  • 如何在android中获取纬度和经度?

    android2 3 3中如何获取当前的经纬度 我尝试跟随this https stackoverflow com questions 2227292 how to get latitude and longitude of the mob
  • 当使用实体框架代码优先映射属性到单独的表时,移动外键字段

    使用代码优先 EF 映射表时遇到奇怪的问题 我有一个父类 Contract 与另一个类 Supplier 具有多对一关系 要求在合同实体中存储合同的扫描副本 为了避免每次都查询文档字节 我想将此属性存储在单独的表中 我可以让 EF 将 Co
  • 为什么我的“事件”总是空?

    我正在尝试连接一个新事件 但由于某种原因 更改 总是评估为空 public class MyTreeViewItem INotifyPropertyChanged private MyTreeViewItem parent public M
  • Windows 批处理中的 if/then/else 语句

    在 shell 脚本中我有以下代码 if echo Mr 32 then echo Success else echo Failed exit fi Windows 批处理文件的等效语法是什么 我很难想象 ECHO 何时会失败并返回 ERR
  • 将布尔值绑定到视觉状态

    我正在使用表达式混合 当列表框没有元素时 我想将文本框的状态更改为红色边框和红色文本 因此 当文本更改时 我会过滤列表框 private void OnIPAddressTextChanged object sender System Wi
  • 启动 docker 守护进程监听特定端口的正确方法

    我是 Docker 新手 希望以守护进程模式启动它 监听特定的 IP 地址和端口 在里面文档 https docs docker com reference commandline daemon 据说这可以通过写来完成sudo usr bi
  • 关于AMR音频文件在不同设备上播放的问题

    我这里遇到了一个很奇怪的问题 我正在开发一个IM软件 需要在Android上播放另一个客户端录制的音频文件 我得到的相同音频文件可以在 3GS IOS 4 2 1 设备和模拟器 4 2 上使用 AVAudioPlayer 播放 但是当我尝试
  • 如何在gmake中返回变量的第一个字符

    使用 GNU 的 make 我想提取变量的第一个字符 目前我正在使用 shell 函数bash执行子串 我想知道是否有办法使用 gmake 的内置函数来执行相同的操作 DIR user shell echo USER 0 1 USER 这不
  • ViewModel 在 Activity 之间共享数据

    我正在使用 android viewmodel 但我无法从另一个活动传递和访问活动视图模型的数据 我只能用片段来做到这一点 我应该使用像 EventBus 这样的库在几个活动之间共享数据吗 最佳实践是什么 None
  • Libgdx,使用 Shader 的 Alpha 文本不起作用

    我在使用舞台操作在文本 使用着色器 中应用 alpha 时遇到一些问题 我正在使用添加窗口演员和窗口添加标签演员的组 我组中的其他演员应用 Actions alpha 工作得很好 但我的标签 使用着色器绘制 不起作用 与其他小部件不同的是我
  • SQL Server 理解 SCOPE_IDENTITY()

    我在存储过程中有这段代码 BEGIN SET UserId NULL IF Username IS NOT NULL BEGIN EXECUTE SP ADD USER Username UserId OUTPUT END EXECUTE
  • 使用带有字节计数的 textwrap.wrap

    我怎样才能使用textwrap在行达到一定字节数之前分割的模块 不分割多字节字符 我想要这样的东西 gt gt gt textwrap wrap bytewidth 10 结果取决于所使用的编码 因为每个字节数 字符是编码的函数 在许多编码
  • 如何将一个 64 位整数存储在两个 32 位整数中并再次转换回来

    我很确定这只是一些按位运算的问题 我只是不完全确定我应该做什么 并且所有搜索都会返回 64 位与 32 位 pack u32 x y u64 v u64 x lt lt 32 y unpack x u32 v 0xFFFFFFFF00000
  • 拼写检查仅替换文本框中的第一个单词

    我知道我以前在某个地方见过这个问题 但我不确定当时是否有答案 我正在尝试将拼写检查添加到TextBox在 WPF NET 4 0 中 它在查找和标记不正确的单词方面效果很好 并且会替换单词中的第一个单词TextBox如果不正确 不过 任何超
  • IBOutlet 是否需要是一个属性并被合成?

    在大多数示例中 我看到 IBOutlet 的以下设置 Example A FooController h interface FooController UIViewController UILabel fooLabel property