构造方法

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. 可枚举接口的知识点(IEnumerable 接口)要使用foreach,就必须实现可枚举接口

  2. 使用jQuery实现option的上移和下移

    基本思路:     上移:(1)获取当前选中的元素的索引值             (2)判断当前元素是否为第一个元素             (3)如果是,则不执行上移操作,如果不是,则则调用ins ...

  3. 如何遍历Map操作总结

    Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "123"); ...

  4. Reading Notes : 180213 计算机的硬件构成与处理流程

    读书<计算机组成原理>,<鸟哥的Linux私房菜基础篇> 基本上接触过计算机的人,都多少知道计算机的具体构成,但是真正能讲明白的却说了很多,本节将讲解一下计算机的基本硬件构成和 ...

  5. oracle 数据库密码生产同步模拟环境 ,随记常用命令

    1.查看当前open用户 select username,account_status,expiry_date,profile from dba_users; 2.查看目前的密码过期策略 select ...

  6. 解决最新版 mac os sierra usb网卡不能使用的问题

    解决最新版 mac os sierra usb网卡不能使用的问题 解决最新版 mac os sierra usb网卡不能使用 无法使用未签名第三驱动的问题 我的情况是 mac os sierra 使用 ...

  7. Xcode 怎么查看代码总行数

    打开终端 输入 cd 空格 你的工程路径这里有一个小技巧,你把要统计的文件夹直接拖住拖到终端里,路径就出来了.然后输入find . -name "*.m" -or -name &q ...

  8. Nodejs中获取参数以及处理参数

    先看题干效果 在这里我们建了一个表单 填入表单需要提交的信息 对两个参数进行获取和一个加法计算 表单html代码 <form action='http://localhost:8080' met ...

  9. LAMP+Varnish的实现

    基于Keepalived+Varnish+Nginx实现的高可用LAMP架构 注意:各节点的时间需要同步(ntpdate ntp1.aliyun.com),关闭firewalld(systemctl ...

  10. Python入门 —— 02基础语法

    基础语法入门学习推荐: 简明 Python 教程 下文仅为入门推荐书籍的补充与重点 多行语句:末尾使用斜杠 (  ) ,将一行分为多行 var = item1 + item2 + item3 注释: ...