我正在iTunes U上try 斯坦福大学的iPhone课程,我对指针有点困惑.在第一个作业(job)中,我试着做这样的事情

NSString *processName = [[NSProcessInfo processInfo] processName];
NSInteger *processID = [[NSProcessInfo processInfo] processIdentifier];

这产生了一个错误,在盲目地修补之后,我发现是NSInteger行中的*导致了问题.

所以我显然不明白发生了什么.我会解释我认为它是如何工作的,也许有人会指出这个缺陷.

与web开发不同,我现在需要

假设我是对的,让我困惑的是,为什么我不需要为NSInteger这样做呢?

推荐答案

NSInteger是一个基本类型,这意味着它是can be stored locally on the stack.你不需要使用指针来访问它,但是如果你想的话,你可以.台词:

NSInteger *processID = [[NSProcessInfo processInfo] processIdentifier];

返回实际变量,而不是其地址.要解决此问题,您需要删除*:

NSInteger processID = [[NSProcessInfo processInfo] processIdentifier];

如果你真的想要NSInteger,你可以有一个指向NSInteger的指针:

NSInteger *pointerToProcessID = &processID;

符号是接线员的地址.它将指向NSInteger的指针设置为内存中变量的地址,而不是变量中的整数.

Objective-c相关问答推荐

react 本机WebView菜单项目props 无法在iOS&>=16上使用

为何在Objective-C中,使用self.propName赋值会导致崩溃而使用_ivarName则不会?

可供学习的 iOS 示例项目

如何复制 .xib 文件?

我需要在 ARC 中使用 dealloc 方法吗?

iOS 7 / Xcode 5:以编程方式访问设备启动图像

单元测试私有方法 - 目标 C

判断正在使用的应用程序版本

Interface Builder 中的 IBOutletCollection 集排序

UIWebView 不会zoom 内容以适应

如何在 Objective-C 中创建静态方法?

反转 NSString 文本

Xcode 在 iOS 8 中的 Main() 中引发异常,并带有所有异常断点

从 UIImage 获取 Exif 数据 - UIImagePickerController

如何推送两个视图控制器但只为第二个设置动画过渡?

Core Data使用原始数据类型的标量属性复选框

立即检测 iOS 方向变化

如何像在 Spotify 的播放器中一样创建居中的 UICollectionView

将 Xcode 组创建为文件系统文件夹的工作流程

使用 [NSDate date] 获取当前日期和时间