所以我明白在ObjC中所有东西都存在于堆中,而且一切都有指向它的指针.我正在阅读O'Reilys的书,我正在抓住大多数事情,但是当我按照教程/示例进行操作时会出现类似的内容
NSMutableArray *bar = [[[foo alloc] init] callMethod];
就在*旁边bar,但是你有类似的东西
- (NSString *)createDeck:(NSString *)numOfCards;
为什么NSString *不是- (NSString)*createDeck:(NSString)*numOfCards;?
任何帮助理解事物的概念都会非常感谢.
编辑:
NSUInteger *randomIndex = arc4random() % [deck count];

由于Where
NSUInteger randomIndex = arc4random() % [deck count];
工作正常,在这种情况下如何移除指针有效?
类型是NSString *,这就是你的原因
- (NSString *)createDeck:(NSString *)numOfCards;
Run Code Online (Sandbox Code Playgroud)
返回类型和参数类型括在括号内.
关于最后一个问题,a NSUInteger不是一个对象,尽管命名可能暗示不然.作为本机类型,它存在于堆栈中,您不需要指向它的指针.
如果你cmd-单击类型名称,你会发现它实际上是一个typedef unsigned int(或者unsigned long,取决于架构).
C中的变量(以及Objective-C中的变量)使用声明符声明,声明符由类型和标识符组成.在您的示例中NSString *是类型,并且bar是标识符.
NSString * bar;
^^^^^^^^^^ ^^^
type identifier
Run Code Online (Sandbox Code Playgroud)
没有标识符的声明符称为抽象声明符,在三种情况下通常用于C:
铸件
float x = (float)2/4;
Run Code Online (Sandbox Code Playgroud)的论点 sizeof()
sizeof(int *);
Run Code Online (Sandbox Code Playgroud)声明函数的参数类型
void foo(int *, float);
Run Code Online (Sandbox Code Playgroud)在Objective-C中,它们也用于返回和参数类型的方法,这就是你拥有的原因
- (NSString *)createDeck:(NSString *)numOfCards;
Run Code Online (Sandbox Code Playgroud)
(关于声明者的大部分信息都改编自http://nilsou.com/blog/2013/08/21/objective-c-blocks-syntax/)
关于星号的位置,
NSString *bar;
NSString * bar;
NSString* bar;
Run Code Online (Sandbox Code Playgroud)
是所有有效的方法来声明一个指向NSString的类型指针的变量,也就是说NSString *.
哪一个使用的是个人品味的纯粹问题,即使我相信第一个是最常见的.
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |