黑马程序员————第十九天

原创 2015年07月08日 10:07:10

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

OC中self相当于C++java中的this指针

super发送消息将方法实现分发给其父类


self应用场景

1.用在类方法

2.用在对象方法中

3.访问成员变量

4.self在OC的内存管理特殊使用



self在对象方法中时期只带调用当前方法的对象

@implementation Person

-(void) run

{

}

-(void) eat:(NSString *)foodName

{

[self run];

}

@end




2.self在类方法使其指带当前类


[Person class];

返回的就是的当前类




继承

在子类的文件中需要导入需要继承的头文件


1.子类不能定义和父类同名的实例变量但可继承父类的

OC支持隔层继承

2.集成体系的调用顺序为层层往上找


实例变量作用域

public  任意程序集

protected 同类和派生类

private 同一类


@package (框架级别的)作用域介于私有和公开之间

只要处于用一个框架中就可以直接通过变量名访问


@private  能继承,不能被外部方法访问


类的声明中默认的为@protected




OC中的私有变量

.m文件也可声明成员变量

真正的私有变量只能在当前类使用,不能被继承,也不能访问



在.h中没有声明(.h文件看做是对外的一个接口)

在.m实现此时方法称为私有方法

可用[self 方法名]访问私有方法



description方法

Dog *d=[Dog new];

NSLog(@"%@",d); //打印对象,调用了对象的description方法

打印:<Dog:0x1001002e0>

重写父类的description时千万不要在description方法中同时使用%@和self造成死循环


多态

不同对象以自己的方式响应同名方法的能力


多态条件有继承关系,方法重写

Animals *anl=[Dog new];

[(Dog *)anl eat];

OC运行时加入新的数据类型和新的模块:动态类型识别,动态绑定,动态加载

存在多态,父类可访问子类的方法,否则不可以。



获取类对象

Class c1=[Person class];

Person *p=[c1 new]; //使用类对象创建实例对象[c1 test];调用的是类方法



SEL类型

全称selector 表示方法存储位置


[p test] 寻找方法的过程

1.把test方法名包装成sel类型的数据

2.根据sel数据找到对应的方法地址

3.根据方法地址调用相同的方法

4.注意:在这个操作中的有缓存,第一次一个找一个之后直接使用


每个方法都有_cmd表示当前方法

SEL s1=@selector(test);

[p performSelector:s1];


Person  *p=[Person new];

类对象的存储细节

首先通过p指向额地址找到实例对象,之后通过_isa指针的地址找到person类对象再通过类对象的_isa指针找到Person的代码区空间。之后通过SEL找到需要的方法。












版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【黑马程序员】IO流(一) 第十九天

-------  android培训、java培训、java学习型技术博客、期待与您交流! ---------- 知识点 01)System /* * System:类中的方法和属...

黑马程序员--Java基础学习(IO流)第十九天

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Java基础学习(IO流)第十九天 一,字符流缓冲区 缓冲区的出现提高了数据的...

黑马程序员--- 学习笔记(第十九天)

字符流缓冲区" BufferedReader,BufferedWriter 缓冲区的出现是为了提高流的操作效率而出现的,所以在创建缓冲区之前,必须要 先有流对象. BufferedWriter...

黑马程序员-第十九天( IO(Input Output)流)

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------                     ...

黑马程序员--第十九天:io流第二天

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------   import java.i...

黑马程序员_java的异常处理(对第九课—第十课的异常总结)

------- android培训、java培训、期待与您交流! ---------- 通过今天对java语言异常的学习,我来给自己的学习内容做下简单直白的总结: 首先,我来总结下...

黑马程序员————集合框架小结(第一篇)

1,集合是一个容器。用来存储对象。 和数组的区别: 存储的类型不同:数组可以存储基本数据类型和对象,集合只能存储对象。 长度不同;数组的长度是固定的,集合的长度是可变的 存储类型是否统一:数组...

黑马程序员————面向对象初步

面向对象初步: 一、成员变量和局部变量内存分配问题:       当局部变量的代码执行到时,会为其开辟栈内存空间,一旦这段代码执行完毕后,立刻会释放  栈内存,也就是说,本来存在栈内存里面的属性之类的...

黑马程序员————Foundation框架_知识总结(下)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Foundation框架中常用的类 /* NSString (NSMutab...

黑马程序员————IO流详解---(1)

概述: 一个字节8bit,每个bit位是0.1两种状态。字节作为最基本的存储单位。 英文字符:一个字节 中文字符:两个字节 机器上都是字节,二进制数据。 文件操作: FileWriter:构造时会...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)