OC复习总结:

这个文件是在学习完C语言的基本用法后,回顾C语言的一些语法和易错,不易理解的一下内容,可能会存在内容不连续的情况.

本文内容,有参考自 M了个J的博客 和 lizze_yun的博客 根据自身的学习进行了部分的摘抄和扩写

原文请参考:http://www.cnblogs.com/mjios/tag/objective-c/default.html?page=1

http://blog.csdn.net/zhangyun2013?viewmode=contents

description方法

NSLog函数一旦发现用%@输出某个OC对象时,就会调用这个对象的description方法(这个方法返回值是NSString类型,是OC中的字符串类型),并且将description方法返回的字符串代替%@的位置进行输出

description方法的默认实现是返回这样的格式:<类名: 对象的内存地址>

<Student: 0x100109910>

每次NSLog函数发现用%@输出某个OC对象,会调用description方法,因此 我们可以通过修改description来改变输出的方式;

- (NSString *)description {

2     return [NSString stringWithFormat:@"age=%i", _age];

3 }

输出结果为:age=10

OC分类语法 Category:

分类的作用:在不改变原来类内容的基础上,可以为类增加一些方法

使用注意:

1.分类只能增加方法,不能增加成员变量

2.分类方法实现中可以访问原来类中声明的成员变量

3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用

4.方法调用优先级:分类(最后参与编译的分类)->原来类->父类

分类的应用:

在开发过程中一般都是给系统自带的类添加一些分类。

实例:

  1. + (int)numberCountOfString:(NSString *)str
  2. {
  3. //定义变量计算数字的个数
  4. int count = 0;
  5. for (int i = 0; i<str.length; i++)
  6. {
  7. unichar c = [str characterAtIndex:i]; // characterAtIndex 这个方法相当于遍历字符串,返回字符
  8. if (c>='0'&& c<='9')
  9. {
  10. count++;
  11. }
  12. }
  13. return count;
  14. // return [str numberCount] // 如果同时有类方法和对象方法,那么就可以直接调用对象方法,不用再把算法写一遍了
  15. }

同理,我们可以写出一个对象方法:

  1. - (int)numberCount
  2. {  //对象方法中,能用self表示的尽量用self表示  这样才能实现谁调用他 就是谁操作 避免与 //对象的耦合性过高
  3. int count = 0;
  4. for (int i = 0; i<self.length; i++)
  5. {
  6. unichar c = [self characterAtIndex:i]; // 当前对象调用方法
  7. if (c>='0'&& c<='9')
  8. {
  9. count++;
  10. }
  11. }
  12. return count;
  13. }

@property int speed;这句话干了三件事。
1->.生成了一个private的_speed成员变量。
2->.声明了_speed的setter和getter方法。
3->.实现了_speed的set和get方法

缺点是自动生成的下划线成员变量是私有的,如果想要子类对象方法可以访问的话还需手动写出成员变量,编译器在编译过程中发现有成员变量就不会自动生成

@synthesize的细节
1.@synthesize age=_age;
setter和getter实现中会访问成员变量_age
如果成员变量_age不存在,就会自动生成一个@private的成员变量_age
2.@synthesize age;
setter和getter实现中会访问成员变量age
如果成员变量age不存在,就会自动生成一个@private的成员变量age

OC中的self既可以用在动态方法中,也可以用在静态方法中

动态方法:对象方法 

静态方法:类方法

self总结

1> 在动态方法中,self代表着"对象"

2> 在静态方法中,self代表着"类"

3> 万变不离其宗,记住一句话就行了:self代表着当前方法的调用者

什么是空指针和野指针

1.空指针

1> 没有存储任何内存地址的指针就称为空指针(NULL指针)

2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0。

2.野指针

"野指针"不是NULL指针,是指向"垃圾"内存(不可用内存)的指针。野指针是非常危险的。

利用野指针发消息是很危险的,会报错。也就是说,如果一个对象已经被回收了,就不要再去操作它,不要再尝试给它发消息。

2> 利用空指针发消息是没有任何问题的,也就是说下面的代码是没有错误的:

[nil setAge:10];

super关键字

super的作用

1.直接调用父类中的某个方法

2.super处在对象中,那么就会调用父类的对象方法

super处在类方法中,那么就会调用父类的类方法

3.使用场合:子类重写父类的方法时想保留父类中的一些行为

比如 在dealloc函数中 需要先释放父类,或者在构造方法初始化成员变量的值时,也要将父类的成员变量值先进行初始化,保证 谁声明 谁初始化

多态:

  1. void feed(Animal *a)
  2. {
  3. [a eat];
  4. }

这个函数既可以接收 Cat类型的对象 也可以接收Dog等子类对象

Animal *a=[Dog new];

对于,上面这句话,系统会认为,a是一个animal类型的对象,但是实际上,执行过程中他所调用的方法都是Dog类型的

多态的局限性

不能访问子类的属性(可以考虑强制转换)

Animal *a=[Dog new];

//多态的一个限制:不能用父类指针调用子类方法

//[a run];  // 编译器警告

Dog *dd=(Dog *)a;//将a强制转为Dog*型的变量

[dd run];

SEL类型:

定义:typedef struct objc_selector*SEL;

Person *p = [[Person alloc] init];

[p test];  // 调用p的test方法

[p performSelector:@selector(test)]  // 间接调用test方法

SEL对象的创建

SEL s =@selector(test);

SEL s2 = NSSelectorFromString(@"test");

SEL对象的其他用法

将SEL对象转为NSString对象

NSString *str =NSStringFromSelector(@selector(test));

_cmd代表当前方法,是SEL类型,相当于_cmd = @selector(方法名);

所以根据这个方法,把_cmd传递进去,就可以得到当前方法的方法名了。

NSString *str = NSStringFromSelector(_cmd);

注意不可以在方法中这么写[self performSelector:_cmd];会引发死循环

因为_cmd代表当前方法,performSelector意思是执行当前方法,所以会引发死循环

当只知道方法名的字符串时可以通过下面的方法来调用方法

NSString *name =@"test";

SEL s =NSSelectorFromString(name);  // 把字符串转为SEL类型数据

[p performSelector:s];

黑马训练营--IOS学习---OC语言学习总结2相关推荐

  1. iOS开发Swift语言学习教程-欧阳坚-专题视频课程

    iOS开发Swift语言学习教程-16345人已学习 课程介绍         Swift这套视频是针对有Objective-C/iOS基础,想转成Swift开发的学习视频,视频中从Swift语法,结 ...

  2. C语言入门教程学习 C语言学习包括哪些?

    嵌入式开发有一定了解的朋友们知道是在操作系统内部开发的,对于操作系统内部来说基本上都是用C语言来进行编译的,所以说对于C语言的学习在嵌入式开发过程中是非常重要的.下面就给大家介绍一些C语言入门教程的相 ...

  3. 生信学习——R语言学习总结

    写在前面--经过了四十天断断续续的学习,算是对R语言有了初步的了解.其实使用R语言,无非就是对数据进行处理分析,然后把结果可视化.但是数据的千变万化,还有数以万计的函数.数据格式,使得这个过程变得很复 ...

  4. IOS学习---OC基础学习(Foundation)

    Foundation框架: 包含许多常见的数据类型 是其他所有Ios框架的基础结构体: NSRange: 范围:成员变量有location(位置).length(长度) @"i love o ...

  5. oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍

    一.类方法的使用 /*像我们之前学的方法,必须先实例化这个类的对象才能调用这个方法,类方法不用实例化对象,直接调用这个方法.之前学的方法调用的语法:[对象名 方法名]; //对象方法类方法:[类名 方 ...

  6. 编程语言学习--C语言学习资料

    一.C语言除了做操作系统底层代码.单片机/嵌入式的开发.还能做很多事情,例如模拟管理系统.网站的开发等等, 二.华为C语言编程规范 三.C语言库函数大全 四.C语言Linux下的开发 五.OpenCV ...

  7. 学习C语言-学习指针

    <p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnC" f ...

  8. 程序员之路──如何学习C语言并精通C语言

    程序员之路──如何学习C语言 学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通.如何以最小的代价学习并精通C语言是本文的主题.请注意,即使是"最小的代价",也绝不是什么 ...

  9. 100以内 蝗 靓耸 6的c语言怎,C语言学习C6.ppt

    C语言学习C6 循环结构程序设计 循环结构的概念 While语句的一般形式.流程图.执行过程 While语句的应用 Do--while 语句的一般形式.流程图.执行过程 Do--while 语句的应用 ...

最新文章

  1. 获取DOM节点的几种方式
  2. AI创业哪家强?6大选择给你方向
  3. PhpStorm 2017 for Mac 汉化
  4. 【ArcGIS遇上Python】ArcGIS Python获取某个字段的唯一值(获取指定字段的不同属性值)
  5. Redis之key的淘汰策略
  6. 关于 ApacheCN 未来发展的思考 2019.5.20
  7. easui Pagination Layout
  8. 通过组策略集中管理管理用户桌面和开始菜单
  9. 单应性(同义词直射变换、射影变换和射影性等)(来自wiki)
  10. ORA-01501: CREATE DATABASE failed
  11. etc 文件夹下放什么内容
  12. 国内期市前7个月成交超去年全年
  13. 使用Aria2+AriaNg自建离线下载
  14. C++飞机票订票系统
  15. 08 获取器 withAttr、多连缀、whereRaw、事务、数据集《ThinkPHP6 入门到电商实战》
  16. 用 Androidx + 蓝牙HC05 点灯(2): Handler 掌舵人 和 Thread 线人,逮着蓝牙老大说黑话:此灯为我开,101011...
  17. 阿里面试——机器学习/算法面试经验案例集合
  18. 双线性插值算法的详细总结
  19. 字节跳动今日头条笔试题目经历2018
  20. 高等院校毕业生登记表计算机水平怎么填,关于《高等学校毕业生登记表》填写详细说明...

热门文章

  1. [DevExpress]DateEdit年月
  2. 关闭页面出现确定,取消按钮
  3. 【CET4四级英语】【单词】单词的同义替换(1)
  4. SpringBoot集成文件 - 集成POI之Excel导入导出
  5. linux设备驱动归纳总结(十二):简单的数码相框
  6. 中国第一个Oracle高可用认证大师?
  7. 如何在电脑上录制视频教学 电脑录制方法共享
  8. 海神号机器人潜艇_美深海机器人意外殉职 在10公里水下被水压挤碎(图)
  9. 我的一个朋友想在这发自我介绍?!
  10. JVisualVM 中线程状态(运行/休眠/等待/驻留/监视)解析