我在Obj-C的第一步做了一个无用的
@interface String : NSString
{
int m_isnull;
}
- (id) init;
- (int) isNull;
@end
@implementation String
- (id) init
{
self = [super init];
m_isnull=1;
return self;
}
- (int) isNull
{
return m_isnull;
}
@end测试:
String *a;
a=@"ok";很好,但只有两个小问题
1)当我编译时,我有这样的警告
warning: incompatible Objective-C types assigning 'struct NSString *', expected 'struct String *'我不知道怎么避免它!?
2) a=@"ok“是初始化字符串的最快方法,但是当我调试时,我不会停留在init构造函数上--为什么?
发布于 2011-01-08 00:34:33
@"ok"是一个NSString对象。您正在创建超类的实例,并试图将其分配给子类指针。把子类划分为一种“是-一种”关系。在您的示例中,String是一个NSString。NSString不是String。因此,不能将NSString对象分配给String指针。
发布于 2011-01-08 00:29:49
@"ok"实际上是一个NSString,就像1是一个整数。这就是为什么你会收到编译器警告。
还有“NSString”字面值。它本质上是NSString+NSString WithUTF8String方法的缩写。Mac已经声明,它用于区分这种字符串文本和C中的char *字符串文本。
源符号
通常,您将在Objective中创建一个类别来扩展NSString类。
发布于 2011-01-08 00:58:42
查看一下NSString类引用:
子类NSString (和NSMutableString)是可能的,但是这样做需要为字符串(不是子类继承的)提供存储设施,并实现两个基本方法。抽象NSString和NSMutableString类是类集群的公共接口,主要由私有的具体类组成,这些类创建和返回适合于给定情况的字符串对象。在这个集群中创建自己的具体子类会带来某些要求(在“重写方法”中讨论)。
如果您真的想将-isNull方法添加到NSString中,那么最好将其作为一个类别添加。
我认为您也可能希望尝试编写-(BOOL) isNotBlank。考虑一下,如果在零指针上调用-isNull会发生什么,这是您所期望的返回值吗?
https://stackoverflow.com/questions/4631532
复制相似问题