0

我有一个以数组为参数的类方法

+(void)classMethod:(NSArray*)array;

带有数组值的消息从外部 ViewController 发送到此方法。

[ViewController classMethod:ValueofArray]

现在我想从与 Class 方法相同的 ViewController 中的实例方法访问该数组的值

-(void)instanceMethod;

这怎么可能?

4

4 回答 4

2

您必须创建一个静态类级别变量来保存该值。

例如:

@implementation SOMyObject

static NSArray *thisArray;


+(NSArray*) thisArray
{
    return thisArray;
}

+(void) myMethod:(NSArray*) array;
{
    thisArray = array;
}

-(void) doWork
{
    //[SOMyObject thisArray]
}

@end
于 2013-02-01T04:12:20.437 回答
1

你写了:

现在我想从与 Class 方法相同的 ViewController 中的实例方法访问该数组的值

但是类方法的重点在于它不是类的实例。当您不需要查看类的任何变量或属性时,您可以使用类方法。例如,类似的方法[MyClass countVowels:someString];可以在没有任何“状态”的情况下执行其操作,因此它可能是类方法的候选者。

另一方面,如果你写“ [myClass countVowels];”,它意味着这样的事情:

MyClass * myClass = [[MyClass alloc] initWithString:@"some string]];
int howMany = [myClass countVowels];

第二个版本可能会存储传递给 init 方法的字符串,然后计算该字符串中的元音。

希望有帮助。

于 2013-02-01T04:04:24.540 回答
0

您可以在类的标头和实现之外创建一个静态类变量。

这是一个例子:

// MyClass.h

@interface MyClass : NSObject
+ (void)setClassArray:(NSArray *)array;
+ (NSArray *)classArray;
@end


// MyClass.m

#import "MyClass.h"

static NSArray *_myClassArray;

@implementation MyClass

+ (NSArray *)classArray
{
    return _myClassArray;
}

+ (void)setClassArray:(NSArray *)array
{
    if (_myClassArray != array)
    {
        _myClassArray = array;
    }
}

@end

因此,您可以像这样设置类数组的值:

[MyClass setClassArray:[NSArray arrayWithObject:@"Some_Objects"]];

在该类的实例中,您可以像这样访问它:

- (void)myInstanceMethod
{
    // setting to another ivar is optional and only shown for clarity

   NSArray *array = _myClassArray;
    // ... do whatever you want to do with it here...
}
于 2013-02-01T04:10:42.903 回答
0

确实,类方法通常(并且应该是)无状态功能实体,您正在寻找的是可能的。在这种情况下,所有实例都想使用一个数组MyViewController,因此设置该信息的其他类并不关心。

MyViewController.m

static NSArray *staticArray;

+ (void)aClassMethod:(NSArray *)array
{
    staticArray = array;
}

- (void)anInstanceMethod
{
    NSLog(@"My staticArray: %@", staticArray);
}

综上所述,这是一个非常具体且非标准的案例。你可能会重新考虑你的用例,也许你真的想要一个委托模式,一个默认的单例,比如[NSNotificationCenter defaultCenter],或者其他东西。或者你实际上有一个很好的用例。好的。

无论如何,你有它。

于 2013-02-01T04:11:10.373 回答