如何在Objective-C中为类中的数组分配内存?

时间:2014-08-11 09:38:40

标签: objective-c arrays memory-management

我对Objective-c非常陌生,我正在努力解决这个问题一段时间!这是我的班级原型:

@interface YoCatchModel : NSObject

/**
 Name of the Yo user. Currently this is local
 */
@property (nonatomic, strong) NSString* username;
/**
 History of the messages sent with Yo
 */
@property (nonatomic, strong, readonly) NSMutableArray* historyArray;

/*
 implement init method
 */
+ (instancetype) initmethod;

我应该在这个只读的方法中为我的历史可变数组分配内存。

我想创建另一个带有用户名字符串参数的init方法。这个新的initWithUsername方法应该在其定义中调用init。

这是我尝试使用instancetype作为返回类型实现init方法的实现。但我不确定如何

  1. 为阵列分配内存。
  2. 为用户名调用另一个init方法。

    @implementation YoCatchModel
    
    + (instancetype)initmethod {
        return [[[self class] alloc] init];
    }
    
  3. 我很感激,如果有人能给我一些提示如何做到这一点。到目前为止,我已阅读这些页面到达此处:

    http://www.techotopia.com/index.php/An_Overview_of_Objective-C_Object_Oriented_Programming#Declaring.2C_Initializing_and_Releasing_a_Class_Instance

    https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple_ref/doc/uid/TP40011210-CH3-SW7

    https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html#//apple_ref/doc/uid/TP40014150-CH1-SW11

1 个答案:

答案 0 :(得分:2)

initWithUsername方法成为您班级的指定初始化程序,如下所示:

- (instancetype)initWithUsername:(NSString *)username
{
    self = [super init];
    if (self) {
        _username = [username copy];
        _historyArray = [NSMutableArray new];
    }
    return self;
}

您应该使用默认的init方法使用指定的初始化程序

- (instancetype)init
{
    return [self initWithUsername:nil];
}

并注意此代码适用于以_开头的属性支持实例变量,而不是使用self.(无论如何都不能使用readonly属性),这是为了避免属性设定方法可能产生的KVO副作用。