Objective c iOS中静态常量变量的子类化问题

Objective c iOS中静态常量变量的子类化问题,objective-c,ios,Objective C,Ios,我有A班和B班 B类是A类的子类 类A有一个静态常量NSString变量 在类B的方法中,我需要使用类a的静态常量NSString变量。我的选项是什么 我尝试再次声明相同的内容,但导致了问题(内部不一致),尝试时没有使用(比如,变量未声明) 你知道我怎样才能解决这个问题吗 谢谢。我个人对此问题的解决方案是使用伪保护方法返回常量字符串 // ClassA.m @interface ClassA () - (NSString *)constantString; @end @implement

我有A班和B班

B类是A类的子类 类A有一个静态常量NSString变量

在类B的方法中,我需要使用类a的静态常量NSString变量。我的选项是什么

我尝试再次声明相同的内容,但导致了问题(内部不一致),尝试时没有使用(比如,变量未声明)

你知道我怎样才能解决这个问题吗


谢谢。

我个人对此问题的解决方案是使用伪保护方法返回常量字符串

// ClassA.m

@interface ClassA ()

- (NSString *)constantString;

@end

@implementation ClassA

- (NSString *)constantString {

    return @"MyConstantString";
}

@end
然后进入您的子类:

// ClassB.m

@interface ClassA ()

// This is a method redeclaration to avoid build warnings
- (NSString *)constantString;

@end

@implementation ClassB

- (void)someMethod {

    NSString *theConstantString = [self constantString];

    // do stuff...
}

@end
这里的假设是您的常量字符串实际上是常量,如果您希望它是动态的,您需要稍微修改此解决方案,但它仍然可以处理它。

通过“类A有一个静态常量NSString变量”,我假设您指的是在类A.m文件中定义如下内容:

static NSString * const MyString = @"MyString";

@implementation ClassA

@end
要允许类A及其子类查看值,可以执行以下操作:

+(NSString*) constString {
    return myConstString;
}
MDClassAPrivate.h:

#import <Foundation/Foundation.h>

static NSString * const MDBlahBlahKey = @"MDBlahBlah";
MDB.h类:

#import "MDClassA.h"

@interface MDClassB : MDClassA {

}

@end
MDClassB.m:

#import "MDClassB.h"
#import "MDClassAPrivate.h"

@implementation MDClassB

@end

通过将静态常量变量移动到单独的文件中,您可以允许任何类在实现文件中导入它们。

创建一个类方法,返回该常量,如下所示:

+(NSString*) constString {
    return myConstString;
}

可以在.h文件中声明静态常量字符串。这样,它们是公共的,可以被导入头文件的其他类使用,包括您的子类

或者,您可以使用extern声明对类B中字符串的引用:

extern NSString *const MyString;

这基本上告诉编译器该字符串的值是在代码的其他地方定义的,它不必担心它。

您可以使用“userDefaults”来设置一个在整个应用程序中都可以访问的值

[[NSUserDefaults standardUserDefaults] setObject:object forKey:@"objectKey"];

你为什么不发布你的代码呢。
[[NSUserDefaults standardUserDefaults] setObject:object forKey:@"objectKey"];