gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:57 25 4
gpt4 key购买 nike

我会一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com