属性复制在Cocoa框架中意味着什么?(如UITabBar的items属性)

2023-11-30

在 Tab Bar.h 中,正确签名的副本

@property(nonatomic,copy) NSArray *items; // 获取/设置可见

这是一个数组 “复制”是什么意思? 复制 NSArray 容器 obj? 复制 NSArray 包含的每个 obj? 或者其他的东西。

所以有一个测试

UITabBar* testBar = [[UITabBar alloc] init];
UITabBarItem* item = [[UITabBarItem alloc] init];
NSArray* array = [[NSArray alloc] initWithObjects:item, nil];

NSLog(@"bar:%p,%d", testBar, testBar.retainCount);
NSLog(@"item:%p,%d", item, item.retainCount);
NSLog(@"array:%p,%d", array, array.retainCount);

testBar.items = array;

NSLog(@"that item:%p,%d", [testBar.items lastObject], [[testBar.items lastObject] retainCount]);
NSLog(@"testBar.items:%p,%d", testBar.items, testBar.items.retainCount);

result

栏:0x96a9750,1

项目:0x96aa230,2

数组:0x96aa280,1

该项目:0x96aa230,2

testBar.items:0x96aa280,6

为什么容器数组和数组中的 obj 都没有被“复制”?


两件事情:

  • 收藏-copy总是浅薄的。它不会复制集合元素(事实上,没有任何东西可以保证这些元素是可复制的——即符合NSCopying协议)。这解释了为什么obj不会被复制 - 它不会得到任何额外的保留。

  • 基金会试图优化其实施-copy to -retain只要有可能。例如,-[NSString copy]是不可变字符串的保留。由于集合副本很浅,因此相同的优化适用于不可变集合。这就是为什么array不被复制而只是被保留。

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

属性复制在Cocoa框架中意味着什么?(如UITabBar的items属性) 的相关文章

随机推荐

  • ForceNetwork 未显示,未返回代码错误

    我正在创建一个 networkD3 forceNetwork 但是在我清除 RStudio 中的环境变量后 当我第二次运行代码时 网络将不会显示在我的浏览器中 知道为什么吗 没有代码错误 变量输出如下 library networkD3 l
  • 在工作表单元格中格式化电话号码

    我正在使用谷歌表格 并希望将美国电话号码转换为以下格式 1xxxyyyzzzz 例如 402 333 4444 应变成 14023334444 我有一个应用程序脚本验证器函数 它可以执行以下操作 var numbers INVALID if
  • NewtonSoft JSON.NET 升级未隐式序列化受保护成员

    我刚刚将 NewtonSoft JSON NET 版本从版本 3 0 0 更新到 3 5 0 我注意到受保护的成员没有隐式序列化 我有以下课程 public class SimpleFileContainer IDto public vir
  • 从 Google Web App 中的 doPost() 重定向,带有应用程序脚本的 HTML 表单

    假设我有一个包含各种输入的 HTML 文件 根据这些输入 我想发送一封电子邮件 然后显示感谢消息或重定向到感谢页面 我正在 doGet 中加载 index html 文件 如下所示 function doGet var template H
  • 如何格式化类似于 Stack Overflow 信誉格式的数字

    我想将数字转换为字符串表示形式 其格式类似于 Stack Overflow 信誉显示 e g 999 999 1000 1 000 9999 9 999 10000 10k 10100 10 1k 另一种方法可以准确产生所需的输出 func
  • ClassNotFoundException 通过 java 的 Servlet 运行 JDBC 时

    当尝试创建 MysqlDataSource 对象时 我遇到了这个奇怪的异常 或者至少我认为这是问题的根源 首先让我准确描述一下我到目前为止所拥有的 我使用 Tomcat7 作为容器 使用 Eclipse 作为 IDE 以便创建一个 JSP
  • 如何创建浅椭圆形 CSS3 阴影

    我知道如何使用 CSS3 阴影 然而我正在尝试实现特定的设计 我希望阴影更亮 并且在左右边缘褪色 请参见附图 我想出的唯一代码如下 但不知道如何使边缘淡出更多 shadow box shadow 0 10px 6px 6px 000000
  • `npm build` 不会运行 package.json 中名为“build”的脚本

    对于我正在尝试使用的新模块npm build无需 gulp Grunt 其他专门的构建工具 scripts build node build js 我的 build js 很简单 console log Hello 然而 运行 npm bu
  • 是否可以在 .exe 中嵌入 bat 文件并将其与 Process 类一起使用?

    我创建了一个与进程一起使用的批处理文件 我目前只有应用程序指向本地计算机上的目录 我不想将我的 exe 与该批处理捆绑在一起 而是想将其作为资源嵌入 以便将其包含在 exe 中 这可以通过批处理文件实现吗 ProcessStartInfo
  • PHP MySql:打印树 - 父子复选框

    我有这个MySql用于放置多个新闻类别 父 子 的表 ID NAME PARENTID DESC 1 LINUX 0 NULL 2 DEBIAN 1 NULL 3 SLAX 1 NULL 4 SLAXLIVE 3 NULL 5 SWFLIV
  • Spark SQL:通过“order by”改善缓存内存占用

    我有两种情况23 GB分区的parquet数据并阅读了一些columns caching它预先触发一系列后续查询 Setup 集群 12 节点 EMR 火花版本 1 6 Spark 配置 默认 运行配置 两种情况相同 Case 1 val
  • 如何在 Swift 中使用下标和上标?

    I want my UILabel to display text in following manner 6 022 1023 What functions does Swift have for subscript and supers
  • 使用 requests 库绕过侵入性 cookie 语句

    我正在尝试使用以下方式抓取网站requests图书馆 但是 我尝试访问的特定网站 http www vi nl matchcenter vandaag shtml 有一个非常侵入性的cookie声明 我尝试按如下方式访问该网站 from b
  • 检测图像是否嵌入

    我开始编写自己的图像主机 但我有一个小问题 如果您通过浏览器直接查看链接 例如 Domain com img 123 我想显示一个 HTML 页面 如果您通过以下方式嵌入链接 我想显示一个图像 img src Domain com img
  • 在 Windows XP 中使用 C# 在登录屏幕上显示窗口

    我正在尝试使用 C 创建一个服务 该服务启动一个可以显示在 Windows XP 登录屏幕上的进程 我发现了一些用 C 执行此操作的代码 C 代码用于创建另一个进程的服务 其中 STARTUPINFO lpDesktop 设置为 WinSt
  • 如何在我的应用程序中列出 iPhone 钥匙串中的证书?

    我正在创建一个 iPhone 应用程序 我们希望在其中使用 x 509 证书进行客户端身份验证 用户可以从电子邮件安装他们的证书 它显示在 设置 gt 常规 gt 配置文件 下 但是我无法从我的应用程序中读取这些证书 我想提供一个类似于 J
  • C大调帕斯卡三角形

    我是一名计算机工程专业的学生 下学期我将开始 C 课程 因此 为了让自己做好一点准备 我开始自学 C 语言 并偶然发现了一个有趣的任务 乍一看 它是为我设计的 不是一个非常高级的水平 任务是编写一个程序来计算给定位置的值帕斯卡三角形 计算它
  • C#中如何设置系统环境变量?

    我试图在我的应用程序中设置系统环境变量 但得到一个SecurityException 我测试了在谷歌中找到的所有内容 但没有成功 这是我的代码 注意 我是我的电脑的管理员并以管理员身份运行 VS2012 尝试1 new Environmen
  • 子类/继承标准容器?

    我经常在 Stack Overflow 上读到这样的说法 就我个人而言 我认为这没有任何问题 除非我以多态方式使用它 即我必须使用的地方virtual析构函数 如果我想扩展 添加标准容器的功能 那么有什么比继承更好的方法呢 将这些容器包装在
  • 属性复制在Cocoa框架中意味着什么?(如UITabBar的items属性)

    在 Tab Bar h 中 正确签名的副本 property nonatomic copy NSArray items 获取 设置可见 这是一个数组 复制 是什么意思 复制 NSArray 容器 obj 复制 NSArray 包含的每个 o