A类有UIImage。
B类具有对A类的静态引用。
在实例化类B之前,我想在类B中调用静态方法来分配类A的实例。
+ (void)setClassAReference:(ClassA*)classA
{
classA_ = classA;
}
这可能吗?
在深入研究当前项目之前,我创建了一个样本,并且能够设置一个整数值,然后用它来实例化B,保留存储的值并允许访问它。
但是,在我当前的项目中,XCode拒绝允许我传递一个整数值:
A类非静态方法:
- (UIImage*)imageWithIdentifier:(ImageIdentifier)identifier; // identifier is enum type
在实例化B类之后,我尝试在A:
中调用一个方法UIImage *img = [classA_ imageWithIdentifier:ImageIdentifier_Foo];
但是我得到一个隐含的转换警告。自动完成显示(id)而不是(ImageIdentifier)。我已经对所有方法签名进行了三重检查,并且都使用了枚举类型。
我是否正确使用静态变量或是否存在其他问题?我意识到我可以使用单身人士,但如果可能,我宁愿不这样做。
我在这里添加了枚举声明:*
typedef enum
{
ImageIdentifier_Foo = 0,
ImageIdentifier_Bar
} ImageIdentifier;
*真实姓名改变以保护无辜者。
答案 0 :(得分:2)
...首先
如果要在实例化之前初始化类上的静态变量,请在NSObject上使用类方法
+ (void) initialize
这是您可以在ClassB中分配静态ClassA变量的地方。
其次....
确保保留该classA变量,否则将被释放。
第三.....
关于你的隐式转换......什么是变量'a',在这之上你写了classA_。你能展示你的枚举声明吗?你导入了ClassA吗?
我没有任何编译错误:
ClassA.h
typedef enum
{
ImageIdentifier_Foo = 0,
ImageIdentifier_Bar
} ImageIdentifier;
@interface ClassA : NSObject
- (UIImage*)imageWithIdentifier:(ImageIdentifier)identifier; // identifier is enum type
@end
ClassA.m
#import "ClassA.h"
@implementation ClassA
- (UIImage*)imageWithIdentifier:(ImageIdentifier)identifier {
return nil;
}
@end
ClassB.h
@interface ClassB : NSObject
@end
ClassB.m
#import "ClassB.h"
#import "ClassA.h"
static ClassA *classA;
@implementation ClassB
+ (void) initialize {
classA = [[ClassA alloc] init];
}
- (void) doSomething {
UIImage *image = [classA imageWithIdentifier:ImageIdentifier_Foo];
NSLog(@"image %@", image);
}
@end
答案 1 :(得分:0)
错误已清除。
我在类B的.h文件中导入了A类。它也被导入到B类的.m文件中。我删除了.h文件中的导入,并将其更改为@class ClassA
一切都自动解决了。
循环引用会导致这种情况吗?