相关疑难解决方法(0)

使用isKindOfClass:对NSString实例确定类型是否安全?

来自NSObject中isKindOfClass:方法文档:

在类集群表示的对象上使用此方法时要小心.由于类集群的性质,您获得的对象可能并不总是您期望的类型.

然后,文档继续给出一个示例,说明为什么不应该像NSArray实例的以下内容那样:

// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
    // Modify the object
}
Run Code Online (Sandbox Code Playgroud)

现在给出一个不同用途的例子,假设我有一个NSObject实例,我想确定我是否有NSString或NSArray.

这两种类型都是类集群 - 但是从上面的文档中可以看出,危险在于isKindOfClass的答案:过于肯定(有时当你真的没有可变数组时回答"是")而是询问有关简单成员资格的问题.群集仍然有效.

一个例子:

NSObject *originalValue;

// originalValue gets set to some instance

if ( [originalValue isKindOfClass:[NSString class]] )
   // Do something with string
Run Code Online (Sandbox Code Playgroud)

这个假设是否正确?使用isKindOfClass是否真的安全:针对类集群实例来确定成员身份?我对无所不在的NSString,NSArray和NSDictionary的答案特别感兴趣,但我有兴趣知道它是否可以推广.

objective-c

35
推荐指数
4
解决办法
7万
查看次数

向NSArray添加类别

我在NSArray中添加了一个带有辅助方法的类别进行排序.我的单元测试全部通过,但是当在模拟器中运行应用程序时,它会爆炸.这可能是因为NSMutableArray/NSCFArray 类集群的东西吗?

这是错误:'NSInvalidArgumentException',原因:'*** - [NSCFArray sortBySequenceAsc]:无法识别的选择器发送到实例0x489c1f0'

无论如何,将类别添加到NSArray和NSMutableArray的正确方法是什么?

@interface NSArray (Util) 
- (NSArray *)sortBySequenceAsc;
@end 

@implementation NSArray (Util)
- (NSArray *)sortBySequenceAsc {
    //my custom sort code here
}
@end
Run Code Online (Sandbox Code Playgroud)

iphone objective-c categories

3
推荐指数
1
解决办法
3557
查看次数

标签 统计

objective-c ×2

categories ×1

iphone ×1