我正在开发一个应用程序,其中我为模型,视图和控制器创建了一些类。
模型类很少,即
CellModel.h
#import <Foundation/Foundation.h>
@interface CellModel : NSObject{
}
@property(nonatomic, assign)BOOL isSelected;
@property(nonatomic, retain)NSString *headingText;
@property(nonatomic, retain)NSString *subHeadingText;
@end
CellModel.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"始终为空。
附言我不想合成我的属性,因为在 XCode 4.6 中没有必要这样做。
不是空的表模型,而是可能需要在添加元素之前初始化可变(menuOptionsArray)数组...
@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 时,您需要对所有对象执行此操作。
getter 和 setter 确实是为您生成的,但它们所做的只是设置或返回您存储在 iVar 中的值,在任何时候都不会执行初始化。
最佳做法是创建自定义延迟初始值设定项 getter。例如,最基本的选择是执行以下操作:
-(NSMutableArray*)menuOptionsArray
{
if(!_menuOptionsArray)
_menuOptionsArray = [[NSMutableArray alloc] init];
return _menuOptionsArray;
}