1

我正在编写类似于 C# Abstract 类的 Objective C 类。我需要在抽象类实现中将 BOOL 变量分配给 TRUE。正如我在Objective C for Abstract 类中所知道的那样,不会有init 方法。那么如何将我的 BOOL 变量默认值更改为 TRUE?

C#类:

public abstract class ABC
{
      private bool isNew = true;
}

我如何在 Objective C 中实现相同的功能?

4

3 回答 3

4

首先,Objective-C 本身没有抽象类的概念,您只需创建一个您不打算为其创建实例的类。因此,编译器不会强制执行“抽象”性质(尽管如果确实需要,您可以选择在代码中强制执行它)。

所以“抽象”只是一个类,它可以有一个init方法——这就是你需要为实例变量设置默认值的方法。

于 2013-10-21T07:23:51.813 回答
3

以下是如何拥有一个“抽象”类来初始化非零成员变量:

// ABC is an abstract class--not to be instantiated directly, but subclassed

@interface ABC : NSObject
@property ( nonatomic ) BOOL isNew ;
@end

@implementation ABC
-(id)init
{
    self = [ super init ] ;

    if ( [ [ self class ] isEqual:[ ABC class ] ] )
    {
        @throw [ NSException exceptionWithName:NSGenericException reason:@"Warning: class ABC must be subclassed. Cannot directly create instances of class ABC" userInfo:nil ] ;
        return nil ;
    }

    self.isNew = YES ;

    return self ;
}

@end

您的子类将如下所示:

@interface MyConcreteABCSubclass : ABC
@end

@implementation MyConcreteABCSubclass

-(id)init
{
    self = [ super init ] ;
    if ( self )
    {
        // initialize subclass vars
    }
    return self ;
}

//
// ... your subclass methods go here ...
//

@end
于 2013-10-21T09:25:09.933 回答
1

您必须实现 init 并将所有属性设置为您想要的值

或者

您可以实现返回默认值的 getter,只要它们没有设置

于 2013-10-21T07:16:44.757 回答