-1

只是想问我在哪里定义初始类属性?

在其他语言中,我习惯于在课程内容开始之前在头部定义一些标准属性。

例如文件的路径。设置等等。

我在哪里用 Objective-C 中的值填充这些初始属性?

谢谢

4

3 回答 3

2

通常它是这样的:

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;
于 2012-06-29T16:12:06.580 回答
1

也许你所追求的一些东西可以用类方法来实现。

类方法用 a +(而不是实例方法' -)编码,并且不能引用实例变量,因为它们不与类的任何特定实例相关联。

这是一个返回默认字符串的类方法:

+ (NSString *)myDefaultString
{
    return @"Some default value";
}

您只需在接收者处使用类名调用它即可调用它。想象一下,您已经在一个名为 的类中定义了该方法MyClass,您可以这样称呼它:

NSString *str = [MyClass myDefaultString];

你会注意到这里没有alloc/init调用。

于 2012-06-29T16:36:28.297 回答
0

公共属性需要在 .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
于 2012-06-29T16:02:29.143 回答