oc-构造函数

new 方法解析

init方法就是初始化方法。用来初始化对象,是个对象方法。

重写init方法

init方法的执行过程

person对象初始化完毕 内部有两个成员变量 一个_age 一个是NSObject
中的isa成员变量

student对象初始化完毕 内部有三个成员变量 一个_no 一个从Person类中继承的_age
还有一个isa

[Person alloc] 分配内存空间,创建一个person对象 包含_age =0;isa =0;

[self init] 进行初始化 优先去Person类中查找init方法

调用 【super init】-->[NSObject init]

NSObject 的init方法就做了一件事情 初始化isa,isa赋值为Person Class

isa作用是 当前对象是什么类 型就指向什么类 isa = Person Class;

【Student alloc】

再调用init方法

isa = Student Class
_age = 10;
_no = 1;

按照顺序初始化完毕

任何子类对象都拥有父类所有的成员变量

自定义构造方法

Person子类Student类重写init方法

父类的成员变量 交给父类去处理

时间: 2024-10-16 11:49:05

oc-构造函数的相关文章

智能指针 与 oc中的指针

智能指针 与 oc中的指针 智能指针的原理及实现 当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝:另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享. 智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count).智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针. 每次创建类的新对象时,初始化指针并将引用计数置为1:当对象作为另一对象的副

OC基础--构造方法

OC语言中类的构造方法学了两种: 一.方法一:[类名 new] 例:[Person new] 缺点:可扩展性不强,假如在Person类中有_age 成员变量,在初始化时想让_age 中的值为20,new方法办不到,只能是创建类之后重新赋值 二.方法二: //返回一个已经分配好内存的对象,但是这个对象没有经过初始化 Person *p = [Person alloc]; //给指针变量p指向的对象进行初始化操作 p = [p init]; 合并写法,以后常用:类名 *指针变量名 =  [[类名 a

类和对象的方法与属性---懒加载与私有事件---单例与私有化构造函数

对象属性: 1.private修饰的属性:只能在本类内部访问,分类和外部都不能访问(彻底私有) 2.fileprivate修饰的属性:在本类和分类中可以访问,外部不能访问(部分私有) 3.直接用let或var修饰的属性:在本类.分类和外部都可以访问(开放) 4.在分类中只能声明计算属性,不能声明存储属性 1 // 属性:可以被外界访问 2 var name:String? 3 4 // private修饰的属性:只能在本类内部访问,分类和外部都不能访问 5 private var age:Str

OC和C语言的混编注意点和好处

苹果的Objective-C编译器批准用户在统一个源文件里自由地混杂利用C++和Objective-C,混编后的语言叫Objective-C++.有了它,你就能够在Objective-C利用过程中利用已有的C++类库. Objective-C和C++混编的关键 在 Objective-C++中,能够用C++代码调用措施也能够从Objective-C调用措施.在这两种语言里对象都是指针,能够在任何地方利用.例如,C++类能够利用Objective-C对象的指针作为数据成员,Objective-C类

OC-学习Tips

(Objective-C) 13,多参数方法:(函数名:f::) 参数能够在 : 前面设置一个标签label,标签label也是函数名的一部分,方便阅读(不带标签实际上也有个匿名标签),第一个参数不能有标签,实际上函数名就是第一个参数的标签. 14,OC不是严格的函数重载(和C++不同),主要看标签中,函数名和参数数量是否相同,不是看参数类型,如: - (int)g:(int)x; - (int)g:(flota)x; //错误,方法冲突了 - (int)g:(int)x:(int)y; //正

OC与Swift的主要区别

swift与OC的主要区别就是语法区别,其他大抵相同. 区别1: swift中使用let定义常量,var定义变量.常量一经赋值,不可以进行修改,变量赋值后可更改. swift能够根据右边的代码,推倒出该变量的准确类型.   在实际开发中 使用常量多还是使用变量多? 使用常量,更加安全,不能够被修改,在需要对该对象进行修改的时候 在修改为var修饰区别. 2: swift对数据要求异常严格,不会做隐式转换; 不同类型之间不能够直接计算需要手动转换类型,调用构造函数传递参数进行类型转换 区别3: s

oc基础知识(转)

1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouch Media Core Services Core OS -------------------- System Framework OC的类声明,定义域 OC关键字定义为  @class O-C特有的语句for(..in ..)迭代循环,其他的条件和循环语句和c一样 OC对面向对象的概述 (1)

OC - 浅谈内存管理

今天看到一篇不错的文章关于OC内存管理的,转载一下与你共享 概述我们知道在程序运行过程中要创建大量的对象,和其他高级语言类似,在ObjC中对象时存储在堆中的,系统并不会自动释放堆中的内存(注意基本类型是由系统自己管理的,放在栈上).如果一个对象创建并使用后没有得到及时释放那么就会占用大量内存.其他高级语言如C#.Java都是通过垃圾回收来(GC)解决这个问题的,但在OjbC中并没有类似的垃圾回收机制,因此它的内存管理就需要由开发人员手动维护.今天将着重介绍ObjC内存管理: 1 引用计数器 2

OC基础 04

OC 基础04 [email protected]基本概念 >[email protected]是编译器的指令 >[email protected] 用在声明文件中告诉编译器声明成员变量的的访问器(getter/setter)方法 这样的好处是:免去我们手工书写getter和setter方法繁琐的代码 @property基本使用 1.在@inteface中,用来自动生成setter和getter的声明 示例: 用@property int age; // 就可以代替下面的两行 - (int)a

如期而至,OC第二天

OC中的构造方法(在对象初始化的时候,这时候可以直接调用构造函数) 1.一般以init开头,(动态方法) 2.返回值最好是返回ID, 步骤:1.调用super的构造方法:      2.判断self是否为空如果不为空,那么就进行赋值操作       3.返回self. -(id)initWithAge:(int)ageandNo:(int)no{ self=[superinit]; if(self){ _age=age; _no=no; } return self; } 如果不打印成员变量而是打