c++ - Objective C 类方法 == C++ 构造函数?

标签 c++ objective-c class methods constructor

我了解一些 C++,现在我也会尝试学习 Objective-C。我的书中简要提到了类方法,并说类方法是可以发送到类的消息,通常用于创建类的实例。

这是否意味着类方法有点像 C++ 中的构造函数?就我而言,我有一个带有 Deck 类的纸牌游戏(当前使用 C++)。当我创建它的实例时,我这样做:

Deck deckWithCards(52);  // A deck with 52 cards with values
Deck deckWithoutCards;   // An empty deck

如果我要在 Objective-C 中做同样的事情,这样做是否被认为是好的“风格”:

Deck *deckWithCards = [Deck newDeck:52]; // A deck with 52 cards with values
Deck *deckWithoutCards = [Deck newDeck]; // An empty deck

我是否正确理解了类方法?类方法还有其他用途吗?

最佳答案

Does this mean that class methods are kind of like constructors in C++?

它们更像是静态成员函数。例如,您可以指定类方法的返回类型。然而 ObjC 的类方法使用动态调度。

初始化器更像是构造函数。

If I was to do the same thing in Objective-C, is it considered good "style" to do it like this: …

真的,你应该分解这里发生的事情。在有意义的地方使用便利构造函数并没有什么问题。通常,您不会费心去声明便利构造函数,而是使用对象的初始值设定项自定义初始化(这些是带有前缀 -init... 的实例方法)。

您可以首先定义或覆盖指定的初始值设定项,而不是使用 +newDeckWithNCards:+newDeck:

- (instancetype)init;
- (instancetype)initWithNCards:(NSUInteger)pNCards;

在某些情况下,提供便利的构造函数可能会很方便,有时在实现类集群时您会更喜欢类方法或工厂(很多人从不这样做)。

在大多数情况下,初始化器就足够了,但在某些情况下使用便利构造函数当然也不错。

类方法可以用于更多用途。再次,将它们视为也具有动态调度的静态成员函数(因此 NSString 方法可能会通过覆盖在其类方法中执行与其类方法中的 NSMutableString 不同的实现,这是在运行时确定)。

关于c++ - Objective C 类方法 == C++ 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778324/

相关文章:

c++ - 如何返回线交叉点?线并不总是相交

c++ - 多态句柄

objective-c - Ooyala 视频播放器 : notification for fullscreen/inline switch?

android - 从另一个项目调用 Activity

Python:定义具有可变数量参数的函数

c++ - 对象声明/初始化为不同类上的私有(private)成员的问题

c++ - AES-NI 256 位 block 加密

c++ - 循环缓冲区重置内存?

objective-c - Objective-C 工厂方法如何转换为 Swift 便捷初始化器?

objective-c - 在UIButton中实现切换功能