A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lin枫 中级黑马   /  2014-4-11 08:32  /  1061 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Lin枫 于 2014-4-11 10:46 编辑

为什么 NSArray 和 NSDictionary 都被设计成只能存放对象(不能存放基本类型,如 int)?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

2 个回复

倒序浏览
因为NSArray中存储的是指针,并且通过在加入到容器中的时候retain来保证指针的有效性。
OC的堆上存储是基于引用计数的,而原始数据类型的操作方式和OC类型是不同的(不需要retain)。
(百度知)
  1. NSNumber *icon_height;  // 创建NSNumber对象
  2. margin_left1 = [NSNumber numberWithFloat: 15.0 / 2];  // 将浮点型转换成NSNumber类型的对象

  3. NSArray *array1;
  4. array1 = [NSArray arrayWithObjects:icon_height,nil]; //将浮点型对象放入数组中
  5. float margin_width = [[arrTemp objectAtIndex:0] floatValue];  //取出数组中的元素,并将其转换成浮点型
  6. 各种数值
复制代码

NSArray和NSDictionary只能存储对象,而不能直接存储任何基本类型的数据,如int、float 或 struct。但是你可以用对象来封装基本数值。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
崔维友 发表于 2014-4-11 09:35
因为NSArray中存储的是指针,并且通过在加入到容器中的时候retain来保证指针的有效性。
OC的堆上存储是基于 ...

哦,明白了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马