gpt4 book ai didi

objective-c - 难以理解 Objective-C 中的指针

转载 作者:行者123 更新时间:2023-12-02 21:44:32 25 4
gpt4 key购买 nike

所以我明白,在 ObjC 中,所有东西都存在于堆中,并且所有东西都有一个指向它的指针。我正在阅读 O'Reily 的书,并且掌握了大部分内容,但是当我按照教程/示例进行操作时,就会出现类似的情况

NSMutableArray *bar = [[[foo alloc] init] callMethod];

* 就在 bar 旁边,但是你会看到类似的东西

- (NSString *)createDeck:(NSString *)numOfCards;

为什么是 NSString * 而不是 - (NSString)*createDeck:(NSString)*numOfCards;

任何有助于理解事物概念的帮助都会非常感谢。

编辑:

NSUInteger *randomIndex = arc4random() % [牌组数]; Error

至于何处NSUInteger randomIndex = arc4random() % [牌组计数];工作正常,为什么在这种情况下删除指针会起作用?

最佳答案

tl;博士

类型是 NSString * 这就是为什么你有

- (NSString *)createDeck:(NSString *)numOfCards;

返回类型和参数类型包含在括号内。

关于最后一个问题,NSUInteger 不是一个对象,尽管命名可能另有暗示。作为 native 类型,它存在于堆栈中,您不需要指向它的指针。

如果您按住 cmd 键单击类型名称,您会发现它实际上是 unsigned int(或 unsigned long,具体取决于架构)的 typedef。


讨论

C 中的变量(以及 Objective-C 中的变量)是使用声明符声明的,声明符由类型和标识符组成。在您的示例中,NSString * 是类型,bar 是标识符。

NSString * bar;
^^^^^^^^^^ ^^^
type identifier

不带标识符的声明符称为抽象声明符,在 C 语言中通常用于以下三种情况:

  • 选角

      float x = (float)2/4;
  • sizeof() 的参数

      sizeof(int *);
  • 声明函数的参数类型

      void foo(int *, float);

在 Objective-C 中,它们也用于方法的返回和参数类型,这就是为什么你有

- (NSString *)createDeck:(NSString *)numOfCards;

(声明器的大部分信息改编自http://nilsou.com/blog/2013/08/21/objective-c-blocks-syntax/)


关于星号的位置,

NSString *bar;
NSString * bar;
NSString* bar;

都是声明类型为指向 NSString 的变量的有效方法,又名 NSString *

使用哪一个纯粹是个人喜好的问题,尽管我相信第一个是最常见的。

关于objective-c - 难以理解 Objective-C 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com