黑马程序员_init的重写

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
 
 

init的重写:


    在OC谈到init这个方法,其实就是把创建对象拆分后研究其原理的组成部分。苹果公司都已经把很多类直接封装好了,初学者尤其见得最多的就是NSObject,init也就是里面的一个对象方法。在刚刚学到创建对象的时候的写法[Person new],其原理也不明白,现在看来是可以把这个拆开成[[Person alloc] init],步骤就是首相给对象分配一个内存也就是[Person alloc]返回一个已经分配好内存的对象,然后再对这个对象进行初始化。有了这个原理,我们就可以对创建的新的对象的初始化按照个人意愿去进行修改了,只要在子类的实现重写init方法就可以了,可以简化后面程序员对变量的使用。
    他的过程是先调用父类的构造方法[super init],这个主要是初始化对象的其他成员变量,完成了这一步再进行子类内部成员变量的初始化。
    其实除了这个固定的写法还可以自定义构造函数,给成员变量赋值,这个和C++的构造函数原理也是一样的,目的都是给成员变量赋初始值。下面代码已注明:

 

/*****  Person class  *********/
@interface Person : NSObject

@property int age; // 这里的功能就是完成get和set方法
@end

@implementation Person
- (id)init
{
	if(self = [super init]) // 这里是访问NSObject的init方法
	{
		_age = 10; // 这里可以把10当作初始值赋给age
	}
}
@end

/**********************************/


/******  Student class  **********/

@interface Student : Person
{
	int _num;
}
@property int num;
@property int weight;

- (id)initWithWeiht : (int)weight; // 自定义构造函数给成员变量赋初始值

@end

@implementation Student
- (id)init
{
	if(self = [super init])
	{
		_age = 20; // 这里是错误的,因为age是私有成员变量不提供子类直接访问
		_num = 1;  // 这里给成员变量num初始化1,创建对象成功后的值
	}
}

- (id)initWithWeiht : (int)weight
{
	if(self = [super init])
	{
		_weight = weight; // 这里给成员变量赋传进来的值
	}
}

@end

/**********************************/


/************  main  **************/

int main()
{
// id是指向oc对象任何类型的指针,左边是先分配内存,然后再调用对象的init方法初始化成员变量

	id p = [[Student alloc] init]; 

	// 这里直接可以按照用户意愿给weight赋初始值,比较方便

	id p1 = [Student alloc] initWithWeight : 50]; 

	NSLog(@"初始化后的age是%d,num是%d",p.age, p.num); //点语法输出成员变量的初始化值
}


/**********************************/


 

 

 

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
__init__和__init__是同一个概念,都是Python中的特殊方法,用于初始化一个类的实例。\[1\]在Python中,每当创建一个类的实例时,都会自动调用该类的__init__方法。__init__方法的第一个参数永远是self,表示创建的实例本身。\[3\]在__init__方法内部,可以将各种属性绑定到self,以便在创建实例时进行初始化操作。\[3\]通过在__init__方法中定义属性,可以确保每个实例都具有相同的属性,并且可以在创建实例时传入与__init__方法匹配的参数进行初始化。\[2\]__init__.py文件是一个特殊的文件,用于将一个目录作为Python包进行导入。\[1\]它可以为空文件,也可以包含一些初始化代码。__init__.py文件的存在告诉Python解释器该目录是一个包,并且可以在该包中导入其他模块。\[1\] #### 引用[.reference_title] - *1* *2* [__init__文件和__init__函数](https://blog.csdn.net/dingding_12345/article/details/70196528)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python中__init__和__init__.py的作用](https://blog.csdn.net/mch2869253130/article/details/88864962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值