构造方法

1.对象创建的原理

new的拆分两部曲

Person *p = [Person alloc]; 分配内存(+alloc)

Person *p = [p init]; 初始化(-init)

合并: Person *p = [[Person alloc] init];

2.init方法的重写

- (void) init {
if(self = [super init]) {
_age = ;//想在对象创建完毕后 成员变量马上就有一些默认的值
}
return self;
}

3.自定义构造方法

/** 自定义构造方法一 **/
- (id) initWithAge : (int) age {
if(self = [super init]) {
_age = age;
}
return self;
} /** 自定义构造方法二 **/
- (id) initWithAge : (int) age andNo : (int) no {
if(self = [super init]) {
_age = age;
_no = no;
}
return self
} /** 注意 **/
//返回值是id类型
//方法名都以init开头

分类

Category

可以给一个类扩充一些方法(不修改原来的代码)

#import "Person.h"

@interface Person (Hy)
- (void) show;
@end /** 声明 **/
//@interface 类名 (分类名称)
//@end
#import "Person+Hy.h"

@implementation Person (Hy)
- (void) show {
NSLog(@"哈哈哈~~!");
}
@end /** 实现 **/
//@implementation 类名 (分类名称)
//@end

使用注意:

分类只能增加方法 不能增加成员变量

分类方法实现中可以访问原来类中声明的成员变量

分类可以重新实现原来类中的方法 但是会覆盖掉原来的方法 会导致原来的方法没法再使用

方法调用的优先级: 分类(最后参与编译的分类优先) ---> 原来类 ---> 父类

类的深入研究

类本身也是一个对象 是Class类型的对象 简称类对象

Person *p = [[Person alloc] init];

Class c = [p class];

[c test];//c是可以调用 Person里面的类方法

类的加载和初始化:

当程序启动时 就会加载项目中所有的类和分类 而且加载后会调用每个类和分类的+load方法 只会调用一次

当第一次使用某个类时 就会调用当前类的+initialize方法

先加载父类再加载子类(先调用父类的+load方法 再调用子类的+load方法) 先初始化父类再初始化子类(先调用父类的+initialize方法再调用子类的+initialize方法)

Objective-C 构造方法 分类 类的深入研究的更多相关文章

  1. 「OC」类的深入研究、description方法和sel

    一.类的深入研究 (一)类的本质 类本身也是一个对象,是class类型的对象,简称“类对象”. Class类型的定义: Typedef struct obj class *class; 类名就代表着类 ...

  2. org.reflections 接口通过反射获取实现类源码研究

    org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...

  3. OC分类(类目/类别) 和 类扩展 - 全解析

    OC分类(类目/类别) 和 类扩展 - 全解析   具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...

  4. 总结:一些使用private 构造方法的类

    第一个,就是单例模式,虽然分为"懒汉模式"和"醉汉模式",但在jvm中有且只有这样的一个对象!这样才能称为单例(详细请参照设计模式) 第二个,工具类,建义工具类 ...

  5. Springboot在包含有参构造方法的类中使用@Value注解取值

    我们在Springboot中经常使用@Value注解来获取配置文件中的值,像下面这样 @Component class A { @Value("${user.value}") pr ...

  6. OC-私有方法,构造方法,类的本质及启动过程

    总结 标号 主题 内容 一 OC的私有方法 私有变量/私有方法 二 @property 概念/基本使用/寻找方法的过程/查找顺序 三 @synthesize @synthesize概念/基本使用/注意 ...

  7. delphi 类方法、类变量、类常量、类属性的研究,自己的研究

    群里我师傅给我的答案: unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Vari ...

  8. javascript继承(一)—类的属性研究

    本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是 ...

  9. Java静态static工具类线程安全问题研究

    针对静态方法有以下一些前提: 静态方法和实例方法的区别是静态方法只能引用静态变量,静态方法通过类名来调用,实例方法通过对象实例来调用 每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自 ...

随机推荐

  1. 使用QT开发GoogleMap瓦片显示和下载工具

    之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背景图或者 ...

  2. PAT——1008. 数组元素循环右移问题

    一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0  ...

  3. 【题解】洛谷P1315 [NOIP2011TG] 观光公交(前缀和+贪心)

    次元传送门:洛谷P1315 思路 思路大概想到了 可是代码实现却没想到 所以参考题解了 D2T3的贪心果然有难度 我们考虑在每次用加速器有两种情况 到下一个点还需要等待:以后的时间就不再影响了 到下一 ...

  4. mininet的安装

    安装Mininet主要参照李呈的教程 http://www.sdnlab.com/11495.html 我的做法是: 安装虚拟机VM(很容易查找). 需要开启虚拟化: BIOS中依次选择:Advanc ...

  5. C#发送邮件类库

    public class Email { #region 发送邮件 /// <summary> /// 发送邮件 /// </summary> /// <param na ...

  6. 在EF Core里面如何使用以前EntityFramework的DbContext.Database.SqlQuery<SomeModel>自定义查询

    问: With Entity Framework Core removing dbData.Database.SqlQuery<SomeModel> I can't find a solu ...

  7. MySQL优化之Explain命令解读

    简述: explain为mysql提供语句的执行计划信息.可以应用在select.delete.insert.update和place语句上.explain的执行计划,只是作为语句执行过程的一个参考, ...

  8. python3 基于tcp 简单client和server

    客户端代码 from socket import * #客户端 client=socket(AF_INET,SOCK_STREAM) #通讯地址 client.connect(('172.18.100 ...

  9. 技巧:Vimdiff 使用(改)

    技巧:Vimdiff 使用(改) 各种 IDE 大行其道的同时,传统的命令行工具以其短小精悍,随手可得的特点仍有很大的生存空间,这篇短文介绍了一个文本比较和合并的小工具:vimdiff.希望能对在 U ...

  10. 阿里云centOS7.4上MySql5.6安装

    最近一个项目要部署在阿里云上,为了开发团队方便,我自费买了个ECS,先装个数据库给开发用. 因为之前都是在真机安装,与这次阿里云上的部署比起来,还是有点区别的. Mysql 1 安装mysql版本包 ...