关于C:类方法和我的数组

class method and my array

本问题已经有最佳答案,请猛点这里访问。

我有这个代码:

h

1
2
3
4
5
@interface DetalhesPod : UIViewController {
    NSString *linhaPod;
}

@property (nonatomic, strong) NSString *linhaPod;

m

1
2
3
+ (NSArray *)_tracks {
    NSArray *arrTexto = [self.linhaPod componentsSeparatedByString:@"#"];
}

为什么我对"self.linhapod"中的"+"有问题?如果我加"—"我就没问题了:

1
2
- (NSArray *)_tracks {
}

错误信息:实例变量"linhapod"在类方法中访问…

谢谢


您在这里看到的是类和该类的实例之间的区别。类的每个实例都有自己的linhaPod实例变量-在一个实例中,它可能指向字符串@"bob",而在另一个实例中,它可能是@"andy"。类是它自己的实体。类方法中的self指的是类本身,而不是任何实例。那么从类本身访问这个变量意味着什么呢?实例变量只存在于实例中(因此称为实例变量)。


不能从静态方法或类方法引用属性(在本例中,是_tracks)。这是因为类方法不在对象上操作,如果没有对象,对象属性值的概念就没有意义。类方法只能使用同一类中的其他类方法和静态变量。查看维基百科关于静态方法的文章(这个概念对于许多编程语言都很常见,包括Objective-C)。它是编程中的一个基本概念,值得学习。