为什么在Objective-C的静态上下文中允许使用self

我以为这是允许的,然后我遇到了内存错误,花了一周时间才发现self不是从类中调用其他静态方法而不是键入类名的别名.

Xcode及其编译器似乎非常擅长发现常见的trap ,为什么它甚至不生成类似的警告呢?

推荐答案

  1. 在Objective-C中没有"静态上下文"这样的东西.相反,我们拥有的是"类方法".它们绝对是not种"静态"方法.
  2. 类方法(前缀为+的方法)是特定对象上的really个实例方法.(你的思想爆炸了吗?)由于在实例方法中有一个self变量可访问,所以在类方法中自然也有一个self变量可访问.
  3. 在类方法中,self分等于the class itself分.
  4. 就像在实例方法中执行[self performAction]次操作来调用这个特定实例上的方法一样,在类方法中执行[self performClassAction]次操作来调用这个特定类上的方法.
  5. 所有Class个对象都是NSObject的子类.所以你可以在任何Class个对象上使用任何NSObject个实例的方法.(你的脑子又爆炸了吗?)

Objective-c相关问答推荐

如何在 Objective-C 中编写计时器?

如何通过仅更改高度而不更改宽度来调整 UILabel 的大小?

UIAlertView 按钮操作

Objective-C 对象的列表 Select 器

如何以编程方式暂停 NSTimer?

Facebook 添加测试用户和管理员是:(待定),这是什么意思?

如何将当前方法的名称或签名放入 NSString?

实现 -hash / -isEqual: / -isEqualTo...: 用于 Objective-C 集合

如何在 iPhone 上默认显示数字键盘?

Swift 3 - dynamic vs @objc

从 UIPageViewController 中移除视图控制器

在 ios8 中没有调用 didRegisterForRemoteNotificationsWithDeviceToken,但是 didRegister...Settings 是

将 NSData 字节转换为 NSString?

NSSet 到 NSArray 转换调用 objectAtIndex?

从 UIImage 获取 Exif 数据 - UIImagePickerController

隐藏 NSTableView 标头?

IOHIDFamily 的神秘控制台错误

NSHTTPCookieStorage 状态未在应用退出时保存.那里有任何明确的知识/文档吗?

@dynamic 在 Objective-C 中做了什么?

捕捉固定步数的 UISlider(如 iOS 7 设置应用程序中的文本大小)