在ObjectiveC中使用指针的最大优势是什么?

Nic*_*ave 7 c cocoa pointers objective-c

我意识到99%的人认为"这是什么......"但请帮助我理解这个使用概念pointers.我相信我的具体问题可以帮助很多新手.

我理解指针是什么,它们是对内存中地址的引用,通过使用(*)运算符,您可以获取该地址中的值.

让我们说:

int counter = 10;
int *somePointer = &counter;
Run Code Online (Sandbox Code Playgroud)

现在我有了内存中的地址counter,我可以通过这样做间接指出它的值:

int x = *somePointer;
Run Code Online (Sandbox Code Playgroud)

哪个x = 10,对吧?

但这是最基本的例子,对于这种情况我可以使用int x = counter;并获得该值,所以请解释为什么指针在Objective-C和其他一些语言中确实是如此重要...在什么情况下只有一个指针才能生成感?

欣赏它.

bde*_*ham 5

Objective-C有指针,因为它是C的演变,它广泛使用指针.像Objective-C这样的面向对象语言中的指针的优点是,在创建对象之后,您可以传递指向对象的指针,而不是绕过对象本身.换句话说,如果你有一些占用大量存储空间的对象,那么传递指针比传递对象本身的副本要高得多.当你只处理像ints 这样的原始类型时,这可能不是很明显,但是当你开始处理更复杂的对象时,内存和时间的节省是巨大的.

更重要的是,三分球让很多更轻松的代码的不同部分互相交谈.如果变量只能通过"按值"而不是"通过引用"(这是使用指针时会发生的情况)传递给函数,那么函数永远不会改变它们的输入.它们只能通过返回值或更改全局变量来改变程序的状态 - 过度使用通常会导致草率,无组织的代码.

这是一个具体的例子.假设您有一个Objective-C方法,它将解析JSON字符串并返回NSDictionary:

+ (NSDictionary *)parseJsonString:(NSString *)json
                            error:(NSError **)error;
Run Code Online (Sandbox Code Playgroud)

NSDictionary如果一切正常,该方法将进行解析并返回.但是如果输入字符串有问题怎么办?我们想要一种方法向用户(或至少向程序员)指示发生了什么,因此我们有一个指向a的指针,该指针NSError将包含该信息.如果我们的方法失败(可能返回nil),我们可以取消引用error参数以查看出错的地方.我们有效地做的是给我们的方法两种不同的返回值:通常,它将返回一个NSDictionary,但它也可以返回一个NSError.

如果你想了解更多这方面的内容,你可能会更好地搜索"C中的指针",而不是"Objective-C中的指针"; 指针当然在Objective-C中广泛使用,但所有底层机制都与C本身相同.

  • 底层机制不仅与C本身完全相同,它*是*C. (2认同)

小智 2

ObjectiveC中使用指针的最大优点是什么

我想说最大的优点是你可以使用 Objective-C - 所有 Objective-C 对象都是使用指针访问的指针(编译器和运行时不会让你静态创建对象),所以你不会没有他们,我们还能走得更远……