Objective-C 构造方法 分类 类的深入研究
构造方法
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 构造方法 分类 类的深入研究的更多相关文章
- 「OC」类的深入研究、description方法和sel
一.类的深入研究 (一)类的本质 类本身也是一个对象,是class类型的对象,简称“类对象”. Class类型的定义: Typedef struct obj class *class; 类名就代表着类 ...
- org.reflections 接口通过反射获取实现类源码研究
org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...
- OC分类(类目/类别) 和 类扩展 - 全解析
OC分类(类目/类别) 和 类扩展 - 全解析 具体见: oschina -> MyDemo -> 011.FoundationLog-OC分类剖析 http://blog.csdn. ...
- 总结:一些使用private 构造方法的类
第一个,就是单例模式,虽然分为"懒汉模式"和"醉汉模式",但在jvm中有且只有这样的一个对象!这样才能称为单例(详细请参照设计模式) 第二个,工具类,建义工具类 ...
- Springboot在包含有参构造方法的类中使用@Value注解取值
我们在Springboot中经常使用@Value注解来获取配置文件中的值,像下面这样 @Component class A { @Value("${user.value}") pr ...
- OC-私有方法,构造方法,类的本质及启动过程
总结 标号 主题 内容 一 OC的私有方法 私有变量/私有方法 二 @property 概念/基本使用/寻找方法的过程/查找顺序 三 @synthesize @synthesize概念/基本使用/注意 ...
- delphi 类方法、类变量、类常量、类属性的研究,自己的研究
群里我师傅给我的答案: unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Vari ...
- javascript继承(一)—类的属性研究
本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是 ...
- Java静态static工具类线程安全问题研究
针对静态方法有以下一些前提: 静态方法和实例方法的区别是静态方法只能引用静态变量,静态方法通过类名来调用,实例方法通过对象实例来调用 每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自 ...
随机推荐
- SpringBoot实战(十二)之集成kisso
关于kisso介绍,大家可以参考官方文档或者是我的博客:https://www.cnblogs.com/youcong/p/9794735.html 一.导入maven依赖 <project x ...
- android application project 开发准备工作
1.下载对应的JDK.SDK http://www.androiddevtools.cn/ 2.创建安卓app应用模拟器Run时会出现如图情况 解决办法是: 启动 Android SDK Manage ...
- 课时10.第一个HTML网页(掌握)
网页的固定格式 编写网页和写信一样都有一套规范和要求,这套规范和要求中规定了写信的固定格式 写信基本结构 亲爱的xx: 你好! 我.................. ...... 此致 敬礼! xx ...
- 架构模式:MVC与MVVM
本文探讨如下几个问题: 什么是MVC 什么是MVVM MVC与MVVM对架构属性的影响 MVC实例SpringMVC MVVM实例Vue MVC.MVVM与Layer中的Model,Controlle ...
- ABAP开发顾问必备:SAP ABAP开发技术总结[转载]
转载自SAP师太技术博客,原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 在原文上增加了链接,此文及此文的链接版权都归SAP师太所有. ...
- 关于Hibernate基于version的乐观锁
刚刚接触SSH框架,虽然可能这个框架已经比较过时了,但是个人认为,SSH作为一个成熟的框架,作为框架的入门还是可以的. 马马虎虎学完了Hibernate的基础,总结一点心得之类的. 学习Hiberna ...
- Django学习笔记5-url
先来看一下普通的url的格式 {% url 'login_action'%} 但由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回 ...
- Spring Boot在反序列化过程中:jackson.databind.exc.InvalidDefinitionException cannot deserialize from Object value
错误场景 用Spring boot写了一个简单的RESTful API,在测试POST请求的时候,request body是一个符合对应实体类要求的json串,post的时候报错. 先贴一段error ...
- Centos6.5 VM网络故障,可以Ping 通网关,无法上网或者访问其它网段
首先查看cat /etc/sysconfig/network-scripts/ifcfg-eth0 配置是否正确 查看cat /etc/udev/rules.d/70-persistent-net. ...
- Elasticsearch 数据查询
数据准备: PUT /shop { "settings": { "number_of_shards": 3, "number_of_replicas& ...