黑马程序员——OC语言 核心语法 (3)
Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
(以下内容是对黑马苹果入学视频的个人知识点总结)
(一)分类Category
1) 基本用途
如何在不改变原来类模型的前提下,给类扩充一些方法,分类(Category)
2)格式
1>分类的声明
@interface 类名 (分类名称)
// 方法声明
@end
2>分类的实现
@implementation 类名 (分类名称)
// 方法实现
@end
@implementation Person (JJ)
- (void)test2
{
NSLog(@"-----test2");
} - (void)test
{
NSLog(@"Person (JJ)-test");
}
@end
分类好处
①一个庞大的类可以分模块开发
②一个庞大的类可以由多个人来编写,更有利于团队合作
使用注意:
1>分类只能增加方法,不能增加成员变量
2>分类方法实现中可以访问原来类中声明的成员变量
3>分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用
4>方法调用的优先级:分类(最后参与编译的分类优先) --> 原来类 --> 父类
(二)类的本质
1 )类也是个对象
1>其实类也是一个对象,是Class类型的对象,简称“类对象”
2>Class类型的定义
typedef struct objc_class *Class;
类名就代表着类对象,每个类只有一个类对象
2)+load和+initialize
+load
1> 在程序启动的时候会加载所有的类和分类,并调用所有类和分类的+load方法
2> 先加载父类,再加载子类;也就是先调用父类的+load,再调用子类的+load
3> 先加载元原始类,再加载分类
4> 不管程序运行过程有没有用到这个类,都会调用+load加载
+initialize
1>在第一次使用某个类时(比如创建对象等),就会调用一次+initialize方法
2>一个类只会调用一次+initialize方法,先调用父类的,再调用子类的
(三)description的方法
-description方法
使用NSLog和%@输出某个对象时,会调用对象的-description方法,并拿到返回值进行输出
+ description方法
+ (NSString *)description
{
return @"Abc";
}
使用NSLog和%@输出某个类对象时,会调用类对象+description方法,并拿到返回值进行输出
修改NSLog的默认输出
重写-description或者+description方法即可
死循环陷阱
如果在-description方法中使用NSLog打印self
- (NSString *)description
{
// 下面代码会引发死循环
NSLog(@"%@", self);
return [NSString stringWithFormat:@"age=%d, name=%@", _age, _name];
//return @"3424324";
}
(四)SEL
1)方法的存储位置
1>每个类的方法列表都存储在类对象中
2>每个方法都有一个与之对应的SEL类型的对象
3>根据一个SEL对象就可以找到方法的地址,进而调用方法
4>SEL类型的定义
typedef struct objc_selector *SEL;
2)SEL对象的创建
SEL s = @selector(test);
SEL s2 = NSSelectorFromString(@"test");
3)SEL对象的其余用法
// 将SEL对象转为NSString对象
NSString *str = NSStringFromSelector(@selector(test)); Person *p = [Person new];
// 调用对象p的test方法
[p performSelector:@selector(test)];
黑马程序员——OC语言 核心语法 (3)的更多相关文章
- 黑马程序员——OC语言 核心语法(2)
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)id 1)简介:万能指针,能指向任何OC对象,相当于NSObject ...
- 黑马程序员——OC语言 核心语法(1)
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)点语法 点语法其实本质上还是方法调用 当使用点语法时,编译器会自动展 ...
- 黑马程序员——OC语言基础语法 面向对象的思想
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...
- 黑马程序员——OC语言 其他语法
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)ARC的判断准则:只要没有强指针指向对象,就会释放对象 1.ARC特 ...
- 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...
- 黑马程序员——OC语言 类和对象
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...
- 黑马程序员——OC语言 三大特性之多态
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之一的多态 (一)多态的基本概念 OC对象具有多态性体现在 Per ...
- 黑马程序员——OC语言 三大特性之继承
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之继承 (一)继承的基本用法 先建立个Animal再用Dog继承前 ...
- 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...
随机推荐
- opensuse-13.1体验
1 livecd安装 下载地址 http://software.opensuse.org/131/zh_CN 我下载的kde版本的livecd,不像ubuntu支持ultraiso的U盘安装,也不支 ...
- create thread的时候发生core dump
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h& ...
- 原生JS--Ajax
原生Ajax: Ajax基础:--ajax:无刷新数据读取,读取服务器上的信息--HTTP请求方法: --GET:用于获取数据,如浏览帖子 --POST:用于上传数据,如用户注册 --GE ...
- POJ 1113:Wall
原文链接:https://www.dreamwings.cn/poj1113/2832.html Wall Time Limit: 1000MS Memory Limit: 10000K Tota ...
- Linux crontab 命令详解
在 Linux 中,任务可以被配置在指定的时间段.指定的日期.或系统平均载量低于指定的数量时自动运行.红帽企业 Linux 预配置了对重要系统任务的运行,以便使系统能够时时被更新.譬如,被 locat ...
- 修改mysql表结构,添加一个主键索引自增字段,修改原来的主字段为普通字段
原来有一个字段id,为自增,主键,索引.现在要新增一个字段s_id为自增,主键,索引.同时把原来的主字段改成普通字段,默认值为0. Alter table e_diamond_jhds change ...
- 4 .Swift函数|闭包
在编程中,我们常把能完成某一特定功能的一组代码,并且带有名字标记类型叫做函数,在C语言中,我们知道函数名就是一个指针,它指向了函数体内代码区的第一行代码的地址,在swift中也具有同样的功效. 在Sw ...
- SQL疑难杂症【5 】大量数据查询的时候要考虑结果为空的情况
最近几天怪事儿出奇的多,同一个工单.同一个产品,在A线可以正常生产,但是在H线死活都无法生产,系统直接提示TimeOut,监控发现有一条SQL语句执行缓慢,Copy出来仔细查看,很简单的一条语句,如下 ...
- HTTP笔记之一
1 URL 统一资源定位符(URL)是资源标识符最常见的格式.大部分的URL都遵循一种标准格式,这种格式包含三个部分. URL的第一部分:方案(scheme),说明了访问资源所使用的协议类型.通常是 ...
- C#中的多线程 - 同步基础
原文:http://www.albahari.com/threading/part2.aspx 文章来源:http://blog.gkarch.com/threading/part2.html 1同步 ...