如何检查一个对象是否为空?

5

我创建了一个类,其中有几个NSString属性。如果我有这个类的对象,那么如何知道该对象是否为nil(即所有NSString属性都为nil)。

我的类看起来像这样

//  MyClass.h
#import <Foundation/Foundation.h>


@interface MyClass : NSObject <NSCoding> {
 NSString *string1;
 NSString *string2;

}
@property (nonatomic, retain) NSString *string1;
@property (nonatomic, retain) NSString *string2;

@end

我是这样检查它的,但它不起作用。

if (SecondViewController.myObject==nil) {
 NSLog(@"the object is empty");
}

你所说的“不起作用”是指什么?你的对象是否为空,但代码没有被执行?尝试在调试模式下运行程序,查看myObject的实际值是多少。 - Vladimir
我的意思是,初始化的对象被视为非空,即使我没有给对象中的字符串赋任何值。 - node ninja
2个回答

7
如果我有一个这个类的对象,那么如何知道对象是否为空(即所有NSString属性都为空)。
一个对象不是nil仅仅因为它的所有属性都是nil。然而,如果你确实想知道你的对象的字符串属性是否都为nil,可以使用以下方法:
-(BOOL) bothStringsAreNil
{
    return [self string1] == nil && [self string2] == nil;
}

注意:我属于不喜欢将指针看作布尔值的派别,即我更喜欢上述方法而不是下面这种方法。
-(BOOL) bothStringsAreNil
{
    return ![self string1]  && ![self string2];
}

这两者在功能上完全一致。


3
if (!obj)  
   // obj = nil

if (!obj.property)
   // property = nil

为了检查所有属性是否均为空,我认为最好在您的类中创建一个特殊方法进行检查。


如果在我的类上使用“if(!obj)”无效。我认为它只适用于NS类。 - node ninja
if()语句检查值是否为false(0)或true(!=0),因此它应该适用于任何类型——数字、c指针、obj-c对象等。也许你检查的对象只是没有初始化? - Vladimir
@ Vladimir:实例变量会自动设置为* null / nil *。 - Georg Schölly
@awakeFromNib:这个答案看起来是正确的,但我认为你使用的方法有些问题。你能否展示一下你尝试检查 nil 的代码? - Georg Schölly
@George,实例 - 是的,但是在自定义对象(不是iVar)上检查邮件失败的原因之一是它没有初始化 - awakeFromNib写了那个。如果(!obj)是无效的。 - Vladimir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接