构造方法

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. n维向量旋转(循环移位)——学习《编程珠玑》

    问题: 将一个n元一维向量向左旋转i个位置.例如,当n=8且i=3时,向量abcdefgh旋转为defghabc. 简单的代码使用一个n元的中间向量在n步内完成该工作. 你能否仅使用数十个额外字节的存 ...

  2. HDU 2021 发工资咯:)(最水贪心)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2021 发工资咯:) Time Limit: 2000/1000 MS (Java/Others)    ...

  3. STM32F10X固件库函数——串口清状态位函数分析

    STM32F10X固件库函数——串口清状态位函数分析 最近在测试串口热插拔功能的时候,意外发现STM32F10X的串口库函数中,清理串口状态位函数稍稍有点不解.下面是改函数的源码: /******** ...

  4. django模板中如何导入js、css等外部文件

    本教程只适合Django1.4版本.(1.8版本之后不需要这么麻烦,详见 http://www.cnblogs.com/ryan255/p/5465608.html) html模板里面使用了css,但 ...

  5. iOS之estimatedHeightForRowAtIndexPath避免程序EXC_BAD_ACCESS

    在你的项目中把estimatedHeightForRowAtIndexPath方法写实现以下,返回一个估计高度(随便估,笔者建议还是按照正常思路来写,大概高度是多少就返回多少),这样就不会报EXC_B ...

  6. ABAP术语-RFC (Remote Function Call)

    RFC (Remote Function Call) 原文:http://www.cnblogs.com/qiangsheng/archive/2008/03/12/1101581.html RFC ...

  7. 19-3-6Python中字典的解释、使用、嵌套

    一.字典 为什么学字典: 列表的缺点: 1.列表如果存储的数据比较多,那么他的查询速度相对慢. 2.列表存储的数据关联性不强. 字典是什么: Python基础数据类型之一:字典. Python中唯一的 ...

  8. 在Java中用正则表达式判断一个字符串是否是数字的方法

    package chengyujia; import java.util.regex.Pattern; public class NumberUtil { /** * 判断一个字符串是否是数字. * ...

  9. React Native开发之expo中camera的基本使用

    之前做RN项目没调用过本地摄像头,今天下班早,做了一个简单的小demo:主要实现的功能:点击拍照按钮进入拍照界面,点击flip进行前后摄像头转换,点击开始拍照实现拍照功能(没写保存到本地的功能,大家可 ...

  10. (八)netty的SSL renegotiation攻击漏洞

    为了满足安全规范,从http改造成https(见(四)启用HTTPS),然而启用https后就可以高枕无忧了吗?绿盟告诉你:当然不,TLS Client-initiated 重协商攻击(CVE-201 ...