我在读NSArray就是这样的事情.听起来很沉重.我在桌面上有7本非常胖的书,关于Objective-C,Cocoa和C.他们都没有提到Class Cluster,至少我在书的后面的索引中找不到它.那是什么?
我的目标非常简单 - 我正在尝试设置NSString一些测试数据,然后返回类,这应该是NSString.这是我的代码:
NSString* stringer = [NSString stringWithFormat: @"Test"];
NSLog(@"%@", [stringer class]);
Run Code Online (Sandbox Code Playgroud)
日志说这个课程NSCFString不是NSString.这里发生了什么?
这是一种相对常见的设计模式:
它允许您从init调用中返回子类.
我试图找出使用Swift实现相同功能的最佳方法.
我知道有很好的方法可以用Swift实现同样的功能.但是,我的课程将由现有的Obj-C库初始化,我无法控制.因此它需要以这种方式工作并且可以从Obj-C调用.
任何指针都将非常感激.
design-patterns class-cluster ios automatic-ref-counting swift
我正在尝试子类NSNotification.
Apple的文档NSNotification陈述如下:
NSNotification是一个没有实例变量的类集群.因此,你必须继承NSNotification和覆盖原始的方法name,object和userInfo.您可以选择任何您喜欢的指定初始值设定项,但请确保您的初始化程序不会调用 (via )NSNotification的实现. 并不意味着直接实例化,它的 方法引发了异常.init[super init]NSNotificationinit
但这对我来说并不清楚.我应该创建这样的初始化器吗?
-(id)initWithObject:(id)object
{
return self;
}
Run Code Online (Sandbox Code Playgroud) 通过该解析上类集群文件,NSNumber实现了initWithChar:在大致按以下方式:
- (id)initWithChar:(char)c
{
[self release];
return [[__NSCharNumber alloc] initWithChar:c];
}
Run Code Online (Sandbox Code Playgroud)
同样,您可以使用此模式从Nib初始化视图:
- (id)initWithFrame:(CGRect)frame
{
id realSelf = [[self class] nib] instantiateWithOwner:nil options:nil][0];
realSelf.frame = frame;
[self release];
return realSelf;
}
Run Code Online (Sandbox Code Playgroud)
我想知道,self在这些案件中,ARC是否管理了未退回的释放?是否记录在任何地方?
所以我今天在接受采访时被问到这个问题,经过一些谷歌搜索仍然无法找到答案(事实上我甚至找不到任何使用[NSString string]方法的代码).
有什么区别
NSString *someString = [NSString string];NSString *someString = [[NSString alloc] init];现在我最初的想法是[NSString string]返回一个自动释放的对象,而使用alloc和init将返回一个已保留的对象.然而,似乎这个答案是不正确的.
我查看了苹果文档中的NSString类引用,但它说的只是
Returns an empty string.
+ (id)string
Return Value
An empty string.
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这两者之间究竟有什么区别吗?
我正在尝试子类化NSArray,但它在尝试访问count方法时崩溃了应用程序.我知道这NSArray是一个 类集群.
我知道我可以简单地子类化NSObject并将我的数组作为实例变量,但我宁愿继承子类NSArray.
编辑:
理由:我创建一个纸牌游戏,我有一个类Deck应该继承NSMutableArray有一些额外的方法(-shuffle,-removeObjects:,-renew等),我认为它会寻找更清洁的子类NSArray,而不是一个变种.
我需要将其他数据编码为NSString(长篇故事,请不要问为什么......)
我已经NSString使用此处概述的方法进行了子类化:
当我将这些子类中的一个指定为UILabel's文本时,我希望在询问标签文本时将其恢复.但事实并非如此.(我得到一个NSString集群实例)
MyString *string = [[MyString alloc] initWithString:@"Some string"];
UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
l.text = string;
NSString *t = l.text; // not getting the "MyString" object
Run Code Online (Sandbox Code Playgroud)
有没有解决这个问题?
objective-c ×7
cocoa ×4
ios ×3
nsstring ×3
class ×1
inheritance ×1
iphone ×1
nsarray ×1
subclass ×1
swift ×1