Objective C - 如何在不分配和初始化对象的情况下调用 class 方法

Objective C - How to call class methods without allocating and initializing an object

我是 Objective-C 的新手,我发现有效 Objective-C 代码的语法很难理解。例如,所有对象通常使用 MyClass *myObject = [[MyClass alloc] init]; 进行分配和初始化。句法。但是,在下面的示例中,在创建 class 的初始化对象之前,在 "NSKeyedArchiver" class 上调用了一个方法。同样的情况发生在下一行代码中,其中在 "NSUserDefaults" 上调用了一个方法,但没有创建 allocated/initialized 对象。这怎么可能?

NSData *bandObjectData = [NSKeyedArchiver archivedDataWithRootObject:self.bandObject];
[[NSUserDefaults standardUserDefaults] setObject:bandObjectData forKey:bandObjectKey];

谢谢!

这些称为 class 方法,它们不需要执行 class 的实例,因为它们不依赖于实际的 class 实例。您实际上可以通过在方法前加上 + 号(而不是 - 号)来创建自己的方法

当我们不依赖 class 的实例时,我们通常使用 class 方法。因此,在您的示例中,NSKeyedArchiver class 不需要创建其自身的实例来存档数据。同样,您可以在不创建 NSUserDefaults 对象的情况下获得标准的 NSUserDefaults。

其他类型的方法(实例方法)在对象本身需要改变状态时使用。