问题标签 [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.
xcode - 带有clang的类集群:如何使用`__attribute__((objc_method_family(none)))`?
我想实现一个类集群(使用 ARC),但是 clang 妨碍了我。这是一个返回另一个类的具体实例的 init 方法 - 这是类集群的点:
铿锵声抱怨return
声明:
我理解该警告的原因:init
被clang识别为属于init
应该返回实现类(或者可能是子类)实例的方法家族。在类集群中通常不是这种情况,其中要实例化的实际具体类可能会因任何条件而异。
clang 提供了一个注释来覆盖方法族的自动识别:__attribute__((objc_method_family(FAMILLY)))
,其中 family 可以是alloc
、copy
、init
、mutableCopy
或中的一个new
。也可以是none
,文档说:“如果 family 是none
,则该方法没有族,即使根据其选择器和类型,它会被认为有一个族。”
不幸的是,我无法让它在我的情况下工作。如果我将以下声明添加到@interface
:
然后警告不会消失。如果我将属性添加到实现中:
然后警告不会消失,我也得到一个错误:
如果我两者都做,最初的警告不会消失,但我会收到一个额外的警告:
所以我想我错过了一些基本的东西,但是什么?
这适用于 Xcode 4.3.2 或 Xcode 4.4DP2。
objective-c - 如何获取类簇中“顶级”类的名称?
设置:
我有通过 JSON 输入的数据。
使用 NSJSONSerialization 我将 JSON 转换为对象。
JSON 中的数字值作为几种不同的可能类类型出现在 Objective-C 中:
( NSNumber, NSDecimalNumber or __NSCFNumber
) - 所有这些都在NSNumber
.
问题:
NSNumber
1)当我有任何类型的值时,我需要一种方法来获取类簇“伞”类NSNumber, NSDecimalNumber or __NSCFNumber
。
字符串也是如此。NSString
当我有以下任何一种时,我需要一种方法来获得: NSString, NSMutableString, __NSCFString, __NSCFConstantString
。
2) 例如,如果我可以通过代码获取 NSString 集群中所有类的列表,它也可以工作。然后我可以在运行时动态构建一个列表,并确保它是完整的。
到目前为止我所拥有的:
到目前为止,我还想不出一个理智的方法来做到这一点。所以我有一个允许类型的列表,但恐怕它可能不完整+它感觉不是最好的解决方案。
代码: https ://github.com/icanzilb/JSONModel/blob/master/JSONModel/JSONModel.m#L45
objective-c - 使用 ARC 的集群初始化器
通过这个文档对类 clusters 进行解析,大致NSNumber
实现initWithChar:
如下:
同样,您可以使用此模式从 Nib 初始化视图:
我想知道,self
在这些情况下,ARC 是否会管理未归还者的释放?它在任何地方都有记录吗?
ios - 在目标 c 中创建类集群 - 抽象超类上调用的方法?
我正在尝试为 UITableViewDatasource 创建一个类集群。我的界面如下所示:
在内部,抽象类如下所示:
现在,为了让编译器保持沉默,编译器抱怨抽象类(ArrayDatasource)没有实现 uitableview 数据源所需的方法,我添加了这些:
但是每当我使用集群时,数据源方法调用都会转到抽象类!如果我删除这些覆盖,一切都会按预期工作(除了我仍然有编译器警告)。
到底是怎么回事?SingleArrayDatasource
当实例是 a或 a时,为什么这些消息会发送到抽象类TwoDimentionalArrayDatasource
?
更新
这是我实现其中一个具体子类的方式
@implementation SingleArrayDatasource
ios - 使用 ARC 的类集群
我正在尝试创建一个类集群作为子类UIViewController
来完成一些要点:
1. ViewController 的不同行为取决于实际 iOS 版本
2. iOS 版本检查不会弄乱代码
3.来电者无需关心
到目前为止,我得到了课程MyViewController
,MyViewController_iOS7
并且MyViewController_Legacy
。
为了创建实例,我调用了myViewControllerWithStuff:(StuffClass*)stuff
如下实现的方法:
调用者使用myViewControllerWithStuff:
. 之后,如此创建的视图控制器被推送到 aUINavigationController
的导航堆栈上。
这几乎可以按预期工作,但有一个很大的缺点:ARC 不会释放MyViewController_xxx
从导航堆栈中弹出的实例。哪个iOS版本无关紧要。
我错过了什么?
更新: -initWithStuff:
此方法也在MyViewController
. 差异稍后会出现(例如viewDidLoad:
)。
ios - Swift 中的自定义类集群
这是一种比较常见的设计模式:
https://stackoverflow.com/a/17015041/743957
它允许您从init
调用中返回子类。
我试图找出使用 Swift 实现相同目标的最佳方法。
我知道很可能有更好的方法可以用 Swift 实现同样的目标。但是,我的课程将由我无法控制的现有 Obj-C 库初始化。所以它确实需要以这种方式工作并且可以从 Obj-C 调用。
任何指针将不胜感激。
ios - 我如何实现与苹果集群模式相同的行为(NSString 和 NSCFString)
我只是出于测试目的编写以下代码:
我收到以下错误:
如果我写下面的代码同样的事情发生
通过谷歌我知道这initWithFormat
将返回NSCFString
对象。我的问题是,如果NSCFString
是派生类,NSString
那么为什么我不能initWithFormat
在NSCFString
. 如果可以停止可见性,我如何在代码中实现而不覆盖NSCFString
(派生类)中的方法。
简而言之,如果 NSCFString 是 NSString 的派生类,那么为什么我不能在其上调用基类 (initWithFormat) 方法?
ios - 继承自 NSNotification
我想创建一个NSNotification
. 我不想创建一个类别或其他任何东西。
您可能知道NSNotification
是一个类簇,例如NSArray
或NSString
。
我知道集群类的子类需要:
- 声明自己的存储
- 覆盖超类的所有初始化方法
- 覆盖超类的原始方法(如下所述)
这是我的子类(没什么花哨的):
当我使用它时,我得到了一个非凡的:
为了继承,我还需要做什么NSNotification
?
objective-c - Objective-c - 在类集群中级联决策的推荐模式
我想创建一个“多级”类集群,这样每个“具体”类可以在满足某些条件时返回一个更具体的实例。
例如在基类中:
我不想在基类中不断添加新条件(大的“if”语句),因为条件变得非常特定于具体类 - 主要是与新功能有关的优化。
有没有更好的模式呢?
我考虑在每个子类中创建一个类方法来进行额外的检查——但这变得非常尴尬,必须在每个子类中调用 [Subclass initWithData:data]
ios - 为什么我的代码没有进入 [super init] 函数?
共有三个类Question
,Choice
and Blank
,and是andQuestion
的超类。Choice
Blank
然后,我写了一些方法如下:
进而:
输出为:</p>
我不明白为什么[super init]
没有被处决?