黑马训练营--IOS学习---OC语言学习总结2
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.方法调用优先级:分类(最后参与编译的分类)->原来类->父类
分类的应用:
在开发过程中一般都是给系统自带的类添加一些分类。
实例:
- + (int)numberCountOfString:(NSString *)str
- {
- //定义变量计算数字的个数
- int count = 0;
- for (int i = 0; i<str.length; i++)
- {
- unichar c = [str characterAtIndex:i]; // characterAtIndex 这个方法相当于遍历字符串,返回字符
- if (c>='0'&& c<='9')
- {
- count++;
- }
- }
- return count;
- // return [str numberCount] // 如果同时有类方法和对象方法,那么就可以直接调用对象方法,不用再把算法写一遍了
- }
同理,我们可以写出一个对象方法:
- - (int)numberCount
- { //对象方法中,能用self表示的尽量用self表示 这样才能实现谁调用他 就是谁操作 避免与 //对象的耦合性过高
- int count = 0;
- for (int i = 0; i<self.length; i++)
- {
- unichar c = [self characterAtIndex:i]; // 当前对象调用方法
- if (c>='0'&& c<='9')
- {
- count++;
- }
- }
- return count;
- }
@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函数中 需要先释放父类,或者在构造方法初始化成员变量的值时,也要将父类的成员变量值先进行初始化,保证 谁声明 谁初始化
多态:
- void feed(Animal *a)
- {
- [a eat];
- }
这个函数既可以接收 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相关推荐
- iOS开发Swift语言学习教程-欧阳坚-专题视频课程
iOS开发Swift语言学习教程-16345人已学习 课程介绍 Swift这套视频是针对有Objective-C/iOS基础,想转成Swift开发的学习视频,视频中从Swift语法,结 ...
- C语言入门教程学习 C语言学习包括哪些?
嵌入式开发有一定了解的朋友们知道是在操作系统内部开发的,对于操作系统内部来说基本上都是用C语言来进行编译的,所以说对于C语言的学习在嵌入式开发过程中是非常重要的.下面就给大家介绍一些C语言入门教程的相 ...
- 生信学习——R语言学习总结
写在前面--经过了四十天断断续续的学习,算是对R语言有了初步的了解.其实使用R语言,无非就是对数据进行处理分析,然后把结果可视化.但是数据的千变万化,还有数以万计的函数.数据格式,使得这个过程变得很复 ...
- IOS学习---OC基础学习(Foundation)
Foundation框架: 包含许多常见的数据类型 是其他所有Ios框架的基础结构体: NSRange: 范围:成员变量有location(位置).length(长度) @"i love o ...
- oc语言学习之基础知识点介绍(三):类方法、封装以及继承的介绍
一.类方法的使用 /*像我们之前学的方法,必须先实例化这个类的对象才能调用这个方法,类方法不用实例化对象,直接调用这个方法.之前学的方法调用的语法:[对象名 方法名]; //对象方法类方法:[类名 方 ...
- 编程语言学习--C语言学习资料
一.C语言除了做操作系统底层代码.单片机/嵌入式的开发.还能做很多事情,例如模拟管理系统.网站的开发等等, 二.华为C语言编程规范 三.C语言库函数大全 四.C语言Linux下的开发 五.OpenCV ...
- 学习C语言-学习指针
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnC" f ...
- 程序员之路──如何学习C语言并精通C语言
程序员之路──如何学习C语言 学习C语言不是一朝一夕的事情,但也不需要花费十年时间才能精通.如何以最小的代价学习并精通C语言是本文的主题.请注意,即使是"最小的代价",也绝不是什么 ...
- 100以内 蝗 靓耸 6的c语言怎,C语言学习C6.ppt
C语言学习C6 循环结构程序设计 循环结构的概念 While语句的一般形式.流程图.执行过程 While语句的应用 Do--while 语句的一般形式.流程图.执行过程 Do--while 语句的应用 ...
最新文章
- 获取DOM节点的几种方式
- AI创业哪家强?6大选择给你方向
- PhpStorm 2017 for Mac 汉化
- 【ArcGIS遇上Python】ArcGIS Python获取某个字段的唯一值(获取指定字段的不同属性值)
- Redis之key的淘汰策略
- 关于 ApacheCN 未来发展的思考 2019.5.20
- easui Pagination Layout
- 通过组策略集中管理管理用户桌面和开始菜单
- 单应性(同义词直射变换、射影变换和射影性等)(来自wiki)
- ORA-01501: CREATE DATABASE failed
- etc 文件夹下放什么内容
- 国内期市前7个月成交超去年全年
- 使用Aria2+AriaNg自建离线下载
- C++飞机票订票系统
- 08 获取器 withAttr、多连缀、whereRaw、事务、数据集《ThinkPHP6 入门到电商实战》
- 用 Androidx + 蓝牙HC05 点灯(2): Handler 掌舵人 和 Thread 线人,逮着蓝牙老大说黑话:此灯为我开,101011...
- 阿里面试——机器学习/算法面试经验案例集合
- 双线性插值算法的详细总结
- 字节跳动今日头条笔试题目经历2018
- 高等院校毕业生登记表计算机水平怎么填,关于《高等学校毕业生登记表》填写详细说明...
热门文章
- [DevExpress]DateEdit年月
- 关闭页面出现确定,取消按钮
- 【CET4四级英语】【单词】单词的同义替换(1)
- SpringBoot集成文件 - 集成POI之Excel导入导出
- linux设备驱动归纳总结(十二):简单的数码相框
- 中国第一个Oracle高可用认证大师?
- 如何在电脑上录制视频教学 电脑录制方法共享
- 海神号机器人潜艇_美深海机器人意外殉职 在10公里水下被水压挤碎(图)
- 我的一个朋友想在这发自我介绍?!
- JVisualVM 中线程状态(运行/休眠/等待/驻留/监视)解析