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)的更多相关文章

  1. 黑马程序员——OC语言 核心语法(2)

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)id 1)简介:万能指针,能指向任何OC对象,相当于NSObject ...

  2. 黑马程序员——OC语言 核心语法(1)

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)点语法 点语法其实本质上还是方法调用 当使用点语法时,编译器会自动展 ...

  3. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  4. 黑马程序员——OC语言 其他语法

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)ARC的判断准则:只要没有强指针指向对象,就会释放对象 1.ARC特 ...

  5. 黑马程序员——C语言基础语法 关键字 标识符 注释 数据及数据类型

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)C语言简单介绍 (1)C语言程序是由函数组成的任何C语言程序都是由一 ...

  6. 黑马程序员——OC语言 类和对象

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...

  7. 黑马程序员——OC语言 三大特性之多态

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之一的多态 (一)多态的基本概念 OC对象具有多态性体现在 Per ...

  8. 黑马程序员——OC语言 三大特性之继承

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之继承 (一)继承的基本用法 先建立个Animal再用Dog继承前 ...

  9. 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...

随机推荐

  1. SQL递归查询(with cte as)

    with cte as ( select Id,Pid,DeptName,0 as lvl from Department where Id = 2 union all select d.Id,d.P ...

  2. Asp.Net在多线程环境下的状态存储问题

    在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息:或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次 ...

  3. 解读HTML 5新语法 提高语义价值

    HTML 5的新标记 设计者们需要完成的任务是要给HTML 5开发一个更丰富的和更有含义的语义,当然可以想象这种新方案将会是很灵活和很高效的,同时与所有的现代互联网标准相适应.下面就是一些将要在HTM ...

  4. (转)将cocos2dx项目从VS移植到Eclipse

    本文转自:http://www.cnblogs.com/Z-XML/p/3349518.html 引言:我们使用cocos2d-x引擎制作了一款飞行射击游戏,其中创新性地融入了手势识别功能.但是我 们 ...

  5. [Machine-Learning] 机器学习中的几个度量指标

    Several classification metrics for ML/DM methods. 主要解释下机器学习(或数据挖掘)中的几个度量指标. 1. 关于 "TN/TP/FN/FP&q ...

  6. python(六)内置函数

    一.函数知识补充 函数不设置值,默认返回None:函数中参数都是按引用传递,函数里修改了参数,原始参数也会修改. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  7. ConsensusClusterPlus根据基因表达量对样品进行分类

    #http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881355/ 一致聚类方法,采用重抽样方法来验证聚类合理性. library(ALL)data(ALL)d ...

  8. PHP-----二维数组和二分查找

    二维数组由行和列组成.由arr[$i][$j]表示,先后表示行和列,类似于坐标点. 打印二维数组-----通过两次遍历,第一次遍历每一行,第二次遍历每一行的具体元素,并且通过使用count($arr[ ...

  9. ITerm2下使用ssh访问Linux

    通常情况下,iTerm2访问远程Linux使用ssh,与Termial基本一样,方法如下: ssh <用户名>@<ip> 然后输入访问的密码即可.当然还有的时候需要指定访问端口 ...

  10. fifter过滤器

    package fifter; import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterCh ...