1. 在新的指定初始化方法中调用父类的指定初始化方法。
2. 覆盖父类的初始化方法,调用新的指定初始化方法。
#import "JXItemsViewController.h"
@interface JXItemsViewController ()
@end
@implementation JXItemsViewController
- (instancetype)init {
// 调用父类的指定初始化方法
self = [super initWithStyle:UITableViewStylePlain];
return self;
}
- (instancetype)initWithStyle:(UITableViewStyle)style {
return [self init];
}
@end
实现以上两个初始化方法之后,可以确保无论向新创建的 JXItemsViewController 对象发送哪一个初始化方法,初始化后的对象都会使用我们指定的风格。
接下来代码如下:
#import "AppDelegate.h"
#import "JXItemsViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 添加初始化代码
// 创建 JXItemsViewController 对象
JXItemsViewController * itemsViewController = [[JXItemsViewController alloc] init];
// 将 JXItemsViewController 的标示图加入窗口
self.window.rootViewController = itemsViewController;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
构建并运行应用我们确实能在屏幕上看到 UITableView 对象。JXItemsViewController 作为 UITableViewController 的子类,集成了 view 方法。 view 方法会调用 loadView 方法,如果视图不存在,则 loadView 方法会创建并载入一个空的视图。
下面我们要为 UITableView 设置内容。
新建 JXItem 类
#import <Foundation/Foundation.h>
@interface JXItem : NSObject
/** 创建日期 */
@property (nonatomic,strong,readonly) NSDate * createDate;
/** 名称 */
@property (nonatomic,strong) NSString * itemName;
/** 编号 */
@property (nonatomic,strong) NSString * serialnumber;
/** 价值 */
@property (nonatomic,assign) NSInteger valueInDollars;
/** JXImageStore中的键 */
@property (nonatomic,strong) NSString * itemKey;
+ (instancetype)randomItem;
/**
* JXItem类指定的初始化方法
* @return 类对象
*/
- (instancetype)initWithItemName:(NSString *)name
valueInDollars:(NSInteger)value
serialNumber:(NSString *)sNumber;
- (instancetype)initWithItemName:(NSString *)name;
@end
#import "JXItem.h"
@implementation JXItem
+ (instancetype)randomItem {
// 创建不可变数组对象,包含三个形容词
NSArray * randomAdjectiveList = @[
@"Fluffy",
@"Rusty",
@"Shiny"
];
// 创建不可变数组对象,包含三个名词
NSArray * randomNounList = @[
@"Bear",
@"Spork",
@"Mac"
];
// 根据数组对象所含的对象的个数,得到随机索引
// 注意:运算符%是模运算符,运算后得到的是余数
NSInteger adjectiveIndex = arc4random() % randomAdjectiveList.count;
NSInteger nounIndex = arc4random() % randomNounList.count;
// 注意,类型为NSInteger 的变量不是对象
NSString * randomName = [NSString stringWithFormat:@"%@ %@",randomAdjectiveList[adjectiveIndex],randomNounList[nounIndex]];
NSInteger randomValue = arc4random_uniform(100);
NSString * randomSerialNumber = [NSString stringWithFormat:@"%c%c%c%c",
'0' + arc4random_uniform(10),
'A' + arc4random_uniform(26),
'0' + arc4random_uniform(10),
'A' + arc4random_uniform(26)];
JXItem * newItem = [[self alloc] initWithItemName:randomName
valueInDollars:randomValue
serialNumber:randomSerialNumber];
return newItem;
}
- (NSString *)description {
NSString * descriptionString = [NSString stringWithFormat:@"%@ (%@):Worth $%zd, recorded on %@",self.itemName,self.serialnumber,self.valueInDollars,self.createDate];
return descriptionString;
}
- (instancetype)initWithItemName:(NSString *)name
valueInDollars:(NSInteger)value
serialNumber:(NSString *)sNumber {
// 调用父类的指定初始化方法
self = [super init];
// 父类的指定初始化方法是否成功创建了对象
if (self) {
// 为实例变量设置初始值
_itemName = name;
_valueInDollars = value;
_serialnumber = sNumber;
// 设置_createDate为当前时间
_createDate = [NSDate date];
// 创建一个 NSUUID 对象
NSUUID * uuid = [[NSUUID alloc] init];
NSString * key = [uuid UUIDString];
_itemKey = key;
}
// 返回初始化后的对象的新地址
return self;
}
- (instancetype)initWithItemName:(NSString *)name {
return [self initWithItemName:name valueInDollars:0 serialNumber:@""];
}
- (instancetype)init {
return [self initWithItemName:@"Item"];
}
- (void)dealloc {
NSLog(@"Destoryed:%@",self);
}
@end










