问题标签 [class-cluster]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1101 浏览

xcode - 带有clang的类集群:如何使用`__attribute__((objc_method_family(none)))`?

我想实现一个类集群(使用 ARC),但是 clang 妨碍了我。这是一个返回另一个类的具体实例的 init 方法 - 这是类集群的点:

铿锵声抱怨return声明:

我理解该警告的原因:init被clang识别为属于init应该返回实现类(或者可能是子类)实例的方法家族。在类集群中通常不是这种情况,其中要实例化的实际具体类可能会因任何条件而异。

clang 提供了一个注释来覆盖方法族的自动识别:__attribute__((objc_method_family(FAMILLY))),其中 family 可以是alloccopyinitmutableCopy或中的一个new。也可以是none,文档说:“如果 family 是none,则该方法没有族,即使根据其选择器和类型,它会被认为有一个族。”

不幸的是,我无法让它在我的情况下工作。如果我将以下声明添加到@interface

然后警告不会消失。如果我将属性添加到实现中:

然后警告不会消失我也得到一个错误:

如果我两者都做,最初的警告不会消失,但我会收到一个额外的警告:

所以我想我错过了一些基本的东西,但是什么?

这适用于 Xcode 4.3.2 或 Xcode 4.4DP2。

0 投票
1 回答
227 浏览

objective-c - 如何获取类簇中“顶级”类的名称?

设置:

我有通过 JSON 输入的数据。

使用 NSJSONSerialization 我将 JSON 转换为对象。

JSON 中的数字值作为几种不同的可能类类型出现在 Objective-C 中:

( NSNumber, NSDecimalNumber or __NSCFNumber) - 所有这些都在NSNumber.


问题:

NSNumber1)当我有任何类型的值时,我需要一种方法来获取类簇“伞”类NSNumber, NSDecimalNumber or __NSCFNumber

字符串也是如此。NSString当我有以下任何一种时,我需要一种方法来获得: NSString, NSMutableString, __NSCFString, __NSCFConstantString

2) 例如,如果我可以通过代码获取 NSString 集群中所有类的列表,它也可以工作。然后我可以在运行时动态构建一个列表,并确保它是完整的。


到目前为止我所拥有的:

到目前为止,我还想不出一个理智的方法来做到这一点。所以我有一个允许类型的列表,但恐怕它可能不完整+它感觉不是最好的解决方案。

代码: https ://github.com/icanzilb/JSONModel/blob/master/JSONModel/JSONModel.m#L45

0 投票
2 回答
272 浏览

objective-c - 使用 ARC 的集群初始化器

通过这个文档对类 clusters 进行解析,大致NSNumber实现initWithChar:如下:

同样,您可以使用此模式从 Nib 初始化视图:

我想知道,self在这些情况下,ARC 是否会管理未归还者的释放?它在任何地方都有记录吗?

0 投票
2 回答
890 浏览

ios - 在目标 c 中创建类集群 - 抽象超类上调用的方法?

我正在尝试为 UITableViewDatasource 创建一个类集群。我的界面如下所示:

在内部,抽象类如下所示:

现在,为了让编译器保持沉默,编译器抱怨抽象类(ArrayDatasource)没有实现 uitableview 数据源所需的方法,我添加了这些:

但是每当我使用集群时,数据源方法调用都会转到抽象类!如果我删除这些覆盖,一切都会按预期工作(除了我仍然有编译器警告)。

到底是怎么回事?SingleArrayDatasource当实例是 a或 a时,为什么这些消息会发送到抽象类TwoDimentionalArrayDatasource

更新

这是我实现其中一个具体子类的方式

@implementation SingleArrayDatasource

0 投票
1 回答
184 浏览

ios - 使用 ARC 的类集群

我正在尝试创建一个类集群作为子类UIViewController来完成一些要点:

1. ViewController 的不同行为取决于实际 iOS 版本

2. iOS 版本检查不会弄乱代码

3.来电者无需关心

到目前为止,我得到了课程MyViewControllerMyViewController_iOS7并且MyViewController_Legacy

为了创建实例,我调用了myViewControllerWithStuff:(StuffClass*)stuff如下实现的方法:

调用者使用myViewControllerWithStuff:. 之后,如此创建的视图控制器被推送到 aUINavigationController的导航堆栈上。

这几乎可以按预期工作,但有一个很大的缺点:ARC 不会释放MyViewController_xxx从导航堆栈中弹出的实例。哪个iOS版本无关紧要。

我错过了什么?

更新: -initWithStuff:

此方法也在MyViewController. 差异稍后会出现(例如viewDidLoad:)。

0 投票
7 回答
5022 浏览

ios - Swift 中的自定义类集群

这是一种比较常见的设计模式:

https://stackoverflow.com/a/17015041/743957

它允许您从init调用中返回子类。

我试图找出使用 Swift 实现相同目标的最佳方法。

我知道很可能有更好的方法可以用 Swift 实现同样的目标。但是,我的课程将由我无法控制的现有 Obj-C 库初始化。所以它确实需要以这种方式工作并且可以从 Obj-C 调用。

任何指针将不胜感激。

0 投票
3 回答
99 浏览

ios - 我如何实现与苹果集群模式相同的行为(NSString 和 NSCFString)

我只是出于测试目的编写以下代码:

我收到以下错误:

如果我写下面的代码同样的事情发生

通过谷歌我知道这initWithFormat将返回NSCFString对象。我的问题是,如果NSCFString是派生类,NSString那么为什么我不能initWithFormatNSCFString. 如果可以停止可见性,我如何在代码中实现而不覆盖NSCFString(派生类)中的方法。

简而言之,如果 NSCFString 是 NSString 的派生类,那么为什么我不能在其上调用基类 (initWithFormat) 方法?

0 投票
1 回答
341 浏览

ios - 继承自 NSNotification

我想创建一个NSNotification. 我不想创建一个类别或其他任何东西。

您可能知道NSNotification是一个类簇,例如NSArrayNSString

我知道集群类的子类需要:

  • 声明自己的存储
  • 覆盖超类的所有初始化方法
  • 覆盖超类的原始方法(如下所述)

这是我的子类(没什么花哨的):

当我使用它时,我得到了一个非凡的:

为了继承,我还需要做什么NSNotification

0 投票
1 回答
110 浏览

objective-c - Objective-c - 在类集群中级联决策的推荐模式

我想创建一个“多级”类集群,这样每个“具体”类可以在满足某些条件时返回一个更具体的实例。

例如在基类中:

我不想在基类中不断添加新条件(大的“if”语句),因为条件变得非常特定于具体类 - 主要是与新功能有关的优化。

有没有更好的模式呢?

我考虑在每个子类中创建一个类方法来进行额外的检查——但这变得非常尴尬,必须在每个子类中调用 [Subclass initWithData:data]

0 投票
1 回答
63 浏览

ios - 为什么我的代码没有进入 [super init] 函数?

共有三个类QuestionChoiceand Blank,and是andQuestion的超类。ChoiceBlank

然后,我写了一些方法如下:

进而:

输出为:</p>

我不明白为什么[super init]没有被处决?