指针在C和Objective C中的使用方式不同吗?

时间:2011-07-25 13:21:29

标签: objective-c c pointers

请不要误解这个问题。我知道这两种语言中指针的实现是相同的,因为C是Objective C的子集。

我的问题是关于实际代码中指针的实际使用。最佳做法有何不同?做什么不同,为什么?当我了解C中的指针用法时,如果我真的想在Objective C环境中使用这些知识,我应该记住什么?

2 个答案:

答案 0 :(得分:3)

指针在C和Objective-C中仍然是同一种指针。主要区别在于C指针通常直接通过malloc / calloc / valloc获得,并随free一起发布。当使用Objective-C对象时,通常通过调用alloc / init来获取指针,并通过调用release来释放指针。原因是内存管理允许您维护对象的所有权。

答案 1 :(得分:2)

objective-c中的指针实际上用于它们在C中使用的子集:传递对象的引用,并通过引用返回。有时候,你会发现将函数指针作为参数接受的方法,而void *指针有时用于在回调中提供上下文,尽管这些都逐渐被块替换。

与C不同,它们通常不用于引用数组或字符串,也不用作迭代器。你通常不会在内存管理中使用指针(malloc / free等),因为这些都是由系统框架处理的。

修改 你可以找到一个函数指针&基于块的方法在NSArray的sortedArrayUsingFunction:context:sortedArrayUsingComparator:中完成相同的任务。相同的基本原则适用于回调 - 将Mike Ash's block-based KVO methods与Cocoa的内置函数进行比较。