黑马程序员_init的重写
2014-03-30 17:53
197 查看
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
init的重写:
在OC谈到init这个方法,其实就是把创建对象拆分后研究其原理的组成部分。苹果公司都已经把很多类直接封装好了,初学者尤其见得最多的就是NSObject,init也就是里面的一个对象方法。在刚刚学到创建对象的时候的写法[Person new],其原理也不明白,现在看来是可以把这个拆开成[[Person alloc] init],步骤就是首相给对象分配一个内存也就是[Person alloc]返回一个已经分配好内存的对象,然后再对这个对象进行初始化。有了这个原理,我们就可以对创建的新的对象的初始化按照个人意愿去进行修改了,只要在子类的实现重写init方法就可以了,可以简化后面程序员对变量的使用。
他的过程是先调用父类的构造方法[super init],这个主要是初始化对象的其他成员变量,完成了这一步再进行子类内部成员变量的初始化。
其实除了这个固定的写法还可以自定义构造函数,给成员变量赋值,这个和C++的构造函数原理也是一样的,目的都是给成员变量赋初始值。下面代码已注明:
----------------------
ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
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
相关文章推荐
- 黑马程序员——构造方法之init的重写和自定义构造方法
- [Objective-c 基础 - 2.7] 构造方法、重写init方法
- 重写init方法
- 黑马程序员------面向对象(No.4)(对象初始化过程、单例、继承概述、重写)
- 黑马程序员——重写
- [黑马程序员]集合_ArrayList练习时为何要重写equals方法
- 黑马程序员-构造函数以及构造函数的重写
- 黑马程序员_重写父类/super限定
- IOS开发中重写init方法使用需谨慎
- 关于UIView 中init(包括重写) 与 viewDidLoad执行顺序问题
- iOS - 重写init方法的注意事项
- 重写 - init 方法总结
- Objective-C中,重写init方法为什么要self = [super init]?
- 重写了Servlet的init方法后一定要记得调用父类的init方法
- init 和 initWithFrame 重写 注意事项 建议
- 继承CCSprite时不要重写init方法,否则会无限循环
- Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)
- 黑马程序员--学习笔记--Java中的重载和重写
- 重写init方法(构造方法)
- 黑马程序员__静态导入 重载 重写 增强for循环 自动拆箱 自动装箱