只是想问我在哪里定义初始类属性?
在其他语言中,我习惯于在课程内容开始之前在头部定义一些标准属性。
例如文件的路径。设置等等。
我在哪里用 Objective-C 中的值填充这些初始属性?
谢谢
只是想问我在哪里定义初始类属性?
在其他语言中,我习惯于在课程内容开始之前在头部定义一些标准属性。
例如文件的路径。设置等等。
我在哪里用 Objective-C 中的值填充这些初始属性?
谢谢
通常它是这样的:
MyClass.h:
extern NSString * const staticValue1;
extern NSString * const staticValue2;
@interface MyClass : NSObject
{
NSString *_strval;
int _intval;
float _fltval;
}
@property (retain, nonatomic, readwrite) NSString *strval;
@property (assign, nonatomic, readwrite) int intval;
@property (assign, nonatomic, readwrite) float fltval;
@end
我的班级.m:
NSString * const staticValue1 = @"Something";
NSString * const staticValue2 = @"Something else";
@interface MyClass
@synthesize strval = _strval;
@synthesize intval = _intval;
@synthesize fltval = _fltval;
- (id)init
{
self = [super init];
if (self != nil)
{
[self setStrval:[NSString stringWithFormat:@"This is a %@", @"string"]];
[self setIntval:10];
[self setFltval:123.45f];
}
return self;
}
- (void)dealloc
{
[self setStrval:nil];
[super dealloc];
}
@end
这演示了使用合成属性来管理实例变量的内存_strval
,这需要保留/释放以避免内存泄漏。请注意,它[self setStrval]
是使用自动释放对象(来自)初始化的[NSString stringWithFormat
,并将由 setter 方法保留。或者,如果您愿意,可以使用以下语法调用这些方法:
self.strval = [NSString stringWithFormat:@"This is a %@", @"string"];
self.intval = 10;
self.fltval = 123.45f;
也许你所追求的一些东西可以用类方法来实现。
类方法用 a +
(而不是实例方法' -
)编码,并且不能引用实例变量,因为它们不与类的任何特定实例相关联。
这是一个返回默认字符串的类方法:
+ (NSString *)myDefaultString
{
return @"Some default value";
}
您只需在接收者处使用类名调用它即可调用它。想象一下,您已经在一个名为 的类中定义了该方法MyClass
,您可以这样称呼它:
NSString *str = [MyClass myDefaultString];
你会注意到这里没有alloc
/init
调用。
公共属性需要在 .h 文件中定义。
@interface MyClass {
}
@property(nonatomic, reatin) NSString *a;//Define as per needs, then synthesise in .m file
@end
对于私有财产,您需要在 .m 文件中定义内联类别-
@interface MyClass ()
@property(nonatomic, reatin) NSString *b;//Define as per needs, then synthesise in .m file
@end
@implementation MyClass
@synthesize a = _a;
@synthesize b = _b;
- (void)viewDidLoad {
//You can initialise property here or in init method
self.a = @"Demo1";
self.b = @"Demo2";
}
//Now you can have other code for this class.
@end