OC面向对象五构造方法

id:万能指针,已经带*

typedef struct objc object{

Class isa;

} *id;


Person *p = [Person new];
NSObject * = [Person new];//id==NSObject *
id d=[Person new];//能操作任何OC对象
[d setAge:10];

@property id obj;//说明obj是任意类型
[d setObj:@"asdfa"];

  

构造方法:用来初始化对象的方法,是对象方法 -开头

重写构造方法目的:为了让对象创建出来,成员变量就会有一些固定的值

/*注意点:

先调用父类的构造方法([super init])

再进行子类内部成员变量的初始化

*/

Person *p = [Person new];//+ (id)new;

//先分配存储空间+alloc,再初始化-init,初始值是0

Person *p2=[[Person alloc] init];//以后开发都这么写


若想改变init初始化为自定义的值,就要重写- init方法

- (id)init
{
	//1.一定要调用回super的init方法:初始化父类中声明的一些成员变量和其他属性
	self = [super init];  //返回当前对象,由于涉及到运行时,所以需要再次确定
	if (self !=nil)
	{//2.初始化成功
		_age=10;
	}
	return self;//3.返回一个已经初始化完毕的对象
}


 精简:

- (id)init
{
	if(self = [super init])
	{
		_age=10;
	}
	return self;
}

自定义构造方法的规范

1.一定是对象方法,一定以  -   开头

2.返回值一般是id类型

3.方法名一般以init开头

- (id)initWithName:(NSString *)name andAge:(int)age;
- (id)initWithName:(NSString *)name andAge:(int)age
{
	if(self=[super init])
	{
		_name=name;
		_age=age;
	}
	return self;
}
Person *p = [[Person alloc] initWithName:@"Rose" andAge:20];

父类属性(成员变量)交给父类去处理,子类属性交给子类自己处理

Student 继承Person 自定义构造方法

- (id)initWithName:(NSString *)name andAge:(int)age andNo:(int)no
{
//由于子类无法改变父类的成员变量,无法使用_name=name;可以用self.name=name;或[self setName:name];代替之。
//另一个好处就是,父类的name值改了,不需要子类再去改。
   if(self = [super initWithName:name andAge:age])//一般通过super父类的方法实现我们自定义构造方法初始化指定的值
    {
     _no=no;
     }
   return self;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值