1

我正在开发一个应用程序,其中我为模型、视图和控制器创建了一些类。

模型类很少,即

细胞模型.h

#import <Foundation/Foundation.h>

@interface CellModel : NSObject{

}
@property(nonatomic, assign)BOOL isSelected;
@property(nonatomic, retain)NSString *headingText;
@property(nonatomic, retain)NSString *subHeadingText;

@end

细胞模型.m

#import "CellModel.h"

@implementation CellModel

@end

上面提到的类将作为每个单元格的模型对象

表模型.h

/*This is the model class navgation bar menu and will contain objects of "CellModel only"*/
#import <Foundation/Foundation.h>

@interface TableModel : NSObject{

}
@property(nonatomic, retain)NSMutableArray* menuOptionsArray;

@end

表模型.m

#import "TableModel.h"

@implementation TableModel

@end

现在在视图控制器类中,我创建了名为 *tableModelObj 的 TableModel 类型的属性。在一种方法中,我在 tableModelObj.menuOptionArray 中添加了 CellModel 类型的不同对象

但我不知道为什么,但是当我尝试在此数组中添加对象时,对象“tableModelObj”始终为空。

PS 我不想合成我的属性,因为在 XCode 4.6 中没有必要这样做。

4

3 回答 3

3

我认为不是空的表模型,可能是您需要在添加元素之前初始化可变(menuOptionsArray)数组......

于 2013-09-05T12:45:55.727 回答
2

@synthesize将创建属性 getter/setter 方法,但不会分配对象的实例变量,也不会释放它们。你需要:

@implementation TableModel

- (id)init {
    self = [super init];
    if (self) {
        // NOTE! an autorelease object is used
        self.menuOptionsArray = [NSMutableArray array];
    }
    return self;
}

- (void)dealloc {
    self.menuOptionsArray = nil;
    [super dealloc];
}

@end

使用 MRR 时,您需要对所有对象执行此操作。

于 2013-09-05T12:59:29.723 回答
0

确实为您生成了 getter 和 setter,但它们所做的只是设置或返回您存储在 iVar 中的值,在任何时候都不会执行初始化。

最佳实践是创建一个自定义的惰性初始化器 getter。例如,最基本的选择是:

-(NSMutableArray*)menuOptionsArray
{
   if(!_menuOptionsArray)
      _menuOptionsArray = [[NSMutableArray alloc] init];
   return _menuOptionsArray;
}
于 2013-09-05T13:04:42.630 回答