何时在Objective-C中使用基本数据类型?

5
什么情况下应该在Objective-C中使用原始类型而不是NSValue子类?我认为,这段代码比使用NSNumber更加简洁:
    float width = sliderOne.frame.size.width;
    float totalWidth = width * 2 + 10;

但是它有什么缺点吗?此外,我不需要对基本数据类型调用release或任何其他内容,这正确吗?当基本数据类型超出范围时,内存是否会被释放?

3个回答

4

首选基本类型。只有当你需要将它们作为对象传递时才使用NSNumber和NSValue对象。

原始类型的唯一缺点是无法将它们作为对象传递。

原始类型可以在堆栈(局部变量)或堆上(使用malloc)分配。对象只能在堆上分配,这比堆栈分配更昂贵。


为什么我在意我不能将它们作为对象传递?如果这是来自自动装箱世界的愚蠢问题,那我很抱歉。 - Dan Rosenstark
1
如果您想调用一个以NSNumber对象作为参数的API,或者将它们存储在NSArray或NSDictionary中,那么它必须是一个对象。 - progrmr
1
我会说基本的标量类型更受欢迎。只有在非常特殊的情况下,C数组或C字符串才比NSArray或NSString更可取。 - Chuck
谢谢@Chuck,@progrmr...这确实有助于对事情有一些看法。那么我问题的最后一部分是,你是否需要调用release - Dan Rosenstark
1
No. retain、release、autorelease 只适用于引用计数对象,而不能用于原始类型。 - progrmr

2

使用原始类型的一个主要缺点是无法将它们存储在NSArray中。


2
或者任何 Cocoa 集合对象。 - JeremyP

0

无论对于你自己的代码来说哪种更方便,但通常当需要传递到某些API时,你会使用NSwhatever。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接