基本行为方法
1.自定义初始化方法
每个类都需要进行初始化,如果对父类自定义初始化方法不满意,可以进行重写:
- (instancetype)initWithSystem:(NSString *)system brand:(NSString *)brand color:(NSString *)color{
_system = system;
_brand = brand;
_color = color;
return self;
}
2. 便利构造器
便利构造器是一种类方法:
+ (instancetype)mobilePhoneWithSystem:(NSString *)system brand:(NSString *)brand color:(NSString *)color{
MobilePhone *mobilePhone = [[MobilePhone alloc] initWithSystem:system brand:brand color:color];
return mobilePhone;
}
2.getter和setter方法
受保护的实例变量不能在main.m
中赋值 但是可以通过自定义初始化方法进行赋值
要获取赋值后的对象的某个实例变量可以用getter方法
- (NSString *)system{
return _system;
}
对赋值后的对象的某个实例变量进行重新赋值可以用setter方法
- (void)setSystem:(NSString *)system {
_system = system;
}
每个实例变量都应该有一对getter和setter方法
3.全面描述
- (NSString *)description{
NSString *str = [NSString stringWithFormat:@"系统:%@ 品牌:%@ 颜色:%@",_system,_brand,_color];
return str;
}
进行此方法实现后,此类创建的对象在进行NSLog打印时可以直接用对象名
MobilePhone *myPhone = [[MobilePhone alloc] initWithSystem:@"iOS" brand:@"apple" color:@"黑色"];
NSLog(@"%@",myPhone);
*
复合
有时候一个类将另一个类的对象作为自己的实例变量,这种情况叫做复合
复合需要在各自的接口文件的@interface 前面添加@class 类名 表面这个类是可作为自己的一个实例变量
在给存在复合变量的两个类进行自定义初始化的时候 需要考虑创建对象的先后关系,以适当去掉实例变量;在
进行description的时候需要注意循环调用 应该换成getter方法来进行描述打印 (这个方法应该在另一个类中
进行创建)