alloc 是类方法,只能被类调用,返回的是分配的这个类的实例对象,但是没有初始化,需要调用 init进行初始化。这里的init就是对象方法。
TDWShop *s1=[[TDWShop alloc]init];
这里alloc 返回了TDWShop的实例对象,然后对象调用对象方法init.
以上这一句分解开来等于下面:
TDWShop *shop1=[TDWShop alloc];
shop1=[shop1 init]; //这2部等于 TDWShop *shop1=[[TDWShop alloc]init];
作用等于:
TDWShop *shop1=[TDWShop new];
执行完alloc后和执行完init后,对象地址都是一样的,初始化的地址在alloc就固定了
自定义init方法
TDWShop.h
@interface TDWShop : NSObject
@property (strong,nonatomic)NSString *icon;
@property (strong,nonatomic)NSString *title;
+(instancetype)TDWShopWithIcon:(NSString*)icon title:(NSString*)title;//自定义的类方法初始化2个成员变量
-(instancetype)initWithIcon:(NSString*)icon title:(NSString*)title;//自定义的对象方法初始化2个成员变量
@end
TDWShop.m
@implementation TDWShop
+(instancetype)TDWShopWithIcon:(NSString*)icon title:(NSString*)title
{
TDWShop *shop1=[[self alloc]initWithIcon:icon title:title];
return shop1 ;
}
-(instancetype)initWithIcon:(NSString*)icon title:(NSString*)title
{
self = [super init];
if (self) {
_icon=icon;
_title=title;
}
return self;
}
int main(int argc, const char * argv[]) {
TDWShop *s1=[[TDWShop alloc]initWithIcon:@"liantiaobao.png" title:@"链条包"];//这个是执行了NSObject的alloc方法,返回了实例丢向,然后调用自定义的对象方法initWithIcon
NSLog(@"s1.icon=%@, s1.title=%@",s1.icon,s1.title);
TDWShop *s2=[TDWShop TDWShopWithIcon:@"danjianbao.png" title:@"单肩包"];//这里直接调用自定义的类方法进行初始化:TDWShopWithIcon
NSLog(@"s2.icon=%@, s2.title=%@",s2.icon,s2.title);
return 0;
}