我有一个以数组为参数的类方法
+(void)classMethod:(NSArray*)array;
带有数组值的消息从外部 ViewController 发送到此方法。
[ViewController classMethod:ValueofArray]
现在我想从与 Class 方法相同的 ViewController 中的实例方法访问该数组的值
-(void)instanceMethod;
这怎么可能?
我有一个以数组为参数的类方法
+(void)classMethod:(NSArray*)array;
带有数组值的消息从外部 ViewController 发送到此方法。
[ViewController classMethod:ValueofArray]
现在我想从与 Class 方法相同的 ViewController 中的实例方法访问该数组的值
-(void)instanceMethod;
这怎么可能?
您必须创建一个静态类级别变量来保存该值。
例如:
@implementation SOMyObject
static NSArray *thisArray;
+(NSArray*) thisArray
{
return thisArray;
}
+(void) myMethod:(NSArray*) array;
{
thisArray = array;
}
-(void) doWork
{
//[SOMyObject thisArray]
}
@end
你写了:
现在我想从与 Class 方法相同的 ViewController 中的实例方法访问该数组的值
但是类方法的重点在于它不是类的实例。当您不需要查看类的任何变量或属性时,您可以使用类方法。例如,类似的方法[MyClass countVowels:someString];
可以在没有任何“状态”的情况下执行其操作,因此它可能是类方法的候选者。
另一方面,如果你写“ [myClass countVowels];
”,它意味着这样的事情:
MyClass * myClass = [[MyClass alloc] initWithString:@"some string]];
int howMany = [myClass countVowels];
第二个版本可能会存储传递给 init 方法的字符串,然后计算该字符串中的元音。
希望有帮助。
您可以在类的标头和实现之外创建一个静态类变量。
这是一个例子:
// 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...
}
确实,类方法通常(并且应该是)无状态功能实体,您正在寻找的是可能的。在这种情况下,所有实例都想使用一个数组MyViewController
,因此设置该信息的其他类并不关心。
MyViewController.m
static NSArray *staticArray;
+ (void)aClassMethod:(NSArray *)array
{
staticArray = array;
}
- (void)anInstanceMethod
{
NSLog(@"My staticArray: %@", staticArray);
}
综上所述,这是一个非常具体且非标准的案例。你可能会重新考虑你的用例,也许你真的想要一个委托模式,一个默认的单例,比如[NSNotificationCenter defaultCenter]
,或者其他东西。或者你实际上有一个很好的用例。好的。
无论如何,你有它。