我想在public int getCompletionRate() {
return total > 0 ? Math
.round(((float) (total - remaining) / (float) total) * 100) : 0;
}
类中创建一个私有全局变量。以下是我到目前为止的情况:
NSObject
我想创建并分配可在整个+ (MyClass *)sharedInstance
{
static MyClass *sharedInstance;
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
文件中访问的NSDictionary
。
例如:在常规.m
课程中,有:
.m UIViewController
然后在@interface MyViewControllerClassName ()
// Here I would declare private global variables.
// Example:
@property (strong, nonatomic) NSArray *myArray;
@end
我会为其分配一个值,我将能够在整个viewDidLoad
文件中访问它。
我的问题是:如何在.m
类中创建相同的内容(全局私有变量),该类没有NSObject
和@interface
?
更新
我试图在数组中添加对象,并在整个NSObject类中使用它。而不是在我使用它的每种方法中创建它。
示例:
viewDidLoad
更新2
当您创建子类为NSArray *myArray = [[NSArray alloc] initWithObjects: @"One", @"Two", nil];
- (void)firstMethod {
NSLog(@"%@", [self.myArray firstObject]);
}
- (void)secondMethod {
NSLog(@"%@", [self.myArray lastObject]);
}
的新文件时,NSObject
文件不会随.m
一起提供。因此,我不知道在@interface myObjectClass () ... @end
文件中创建我想要访问的变量的位置。
答案 0 :(得分:1)
你说:
当您创建子类为
NSObject
的新文件时,.m
文件不会随@interface myObjectClass () ... @end
一起提供。因此,我不知道在myObjectClass.m
文件中创建我想要访问的变量的位置。
这是真的,但没有什么可以阻止你自己添加这个(称为"私人类扩展")。事实上,这正是你应该做的。然后,所有私有类属性都应该进入这个私有类扩展。
请参阅Class Extensions Extend the Internal Implementation。
回到您的示例,您可能最终得到MyClass.h
中定义的公共接口,如下所示:
@interface MyClass : NSObject
+ (MyClass *)sharedInstance;
- (void)firstMethod;
- (void)secondMethod;
@end
.m
文件可能包含一个私有类扩展,它定义了私有属性:
@interface MyClass ()
@property (nonatomic, strong) NSArray *myArray;
@end
@implementation MyClass
+ (MyClass *)sharedInstance {
static MyClass *sharedInstance;
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
- (MyClass *)init {
self = [super init];
if (self) {
self.myArray = @[@"one", @"two"];
}
return self;
}
- (void)firstMethod {
NSLog(@"%@", [self.myArray firstObject]);
}
- (void)secondMethod {
NSLog(@"%@", [self.myArray lastObject]);
}
@end
从底线开始,可能不会自动为您添加类扩展名,但您可以自行添加。
答案 1 :(得分:0)
为此您定义了MyClass
方法的sharedInstance
对象。
static MyClass *sharedInstance = nil;
+ (MyClass *)sharedInstance
{
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
---------- ---------已编辑
选项1 - MyViewControllerClassName.m
@interface MyViewControllerClassName ()
{
@private // << note: protected is the default when declared in this scope.
NSArray *myArray;
}
@end
选项2 - MyViewControllerClassName.h
@interface MyViewControllerClassName : NSObject
{
@private // << note: protected is the default when declared in this scope.
NSArray * myArray;
}
@end
选项3 - MyViewControllerClassName.m
@implementation MyViewControllerClassName
{
@private // << note: private is the default when declared in this scope.
NSArray * myArray;
}
@end
更多参考:Class variables explained comparing Objective-C and C++ approaches
答案 2 :(得分:0)
我认为这是您要在NSObject
课程中实施的内容。
任何关注的热烈欢迎