OC语言大总结✨

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 根据OC学习的知识点,总结了一下,希望能帮到大家!

第一节 类与对象

知识点 注意事项
面向对象编程 OOP(Object Oriented Programming)
面向对象语言 C++,JAVA,C#,OC,Swift
概念 类,对象,封装,继承,多态...
面向过程编程 分析解决问题的步骤,实现函数,依次调用
面向对象编程 分解问题组成的对象,协调对象间的联系和通信,解决问题.
面向过程以过程为编程中心,面向对象以对象为编程中心.
面向对象编程设计 1.分析涉及到的对象.2.根据功能定义类.3.使用对象的功能完成程序
类和对象 1.类和对象是面向对象的核心.2.类是对象的类型.3.对象是类的实例.4.万事万物皆对象.
OC中类的定义 1.面向对象编程中使用对象完成程序.2.开发中:先定义类,再创建对象,然后适用对象.3.定义类包含两部分:接口部分和实现部分.分开写(1.接口部分:对外声明类的特征和行为.2.实现部分:对内实现行为.)
接口部分 1.接口部分标志:@interface...@end2.作用:声明类的实例变量(特征)和方法(行为).3.包含内容:类名,父类名,实例变量,方法等.
实现部分 1.实现部分标志:@implementation...@end.2.作用:实现方法,即实现类的行为.
类和文件 .h称为接口文件或头文件,.m称为实现文件
创建对象 1.创建对象分两步:分配内存空间和初始化.2.分配内存空间:根据类中声明的实例变量为对象分配内存,并返回首地址.3.初始化:为对象的实例变量设置初始值.
+(id)alloc;(+,表示这个方法属于类,只能类执行,id返回值类型,表示任意类型的对象) -(id)int;-表示这个方法属于对象,只能对象执行.id返回值类型,表示初始化完成的对象.
使用对象 指针存储对象的首地址,代指对象.
简单方法 OC中的方法分两种:类方法和实例方法.
类方法 只能类使用.例如:+(id)alloc,注意:类方法中不能使用实例变量.
实例方法 只能对象使用,例如-init
setter和getter 为实例变量赋值方法称为setter,读取实例变量的方法称作getter(访问器);

第二节 继承、初始化方法、遍历构造器

知识点 注意事项
继承 面向对象的语言提供了继承语法,能够大大简化代码,把公共实例变量和方法写在父类里,子类只需要写自己独有的实例变量和方法.继承即能保证类的完整,又能简化代码.父类可以有多个子类,子类只可以有一个父类.OC里边继承是单向的,不能相互继承.继承具有传递性,子类能继承父类全部的特征和行为.
继承的特点 OC只允许单继承.没有父类的类称为根类,OC中的根类是NSobject.如果父类的方法不满足子类的需求,子类可以重写父类的方法.继承具有传递性
继承中方法的执行 逐级向上,找到就执行,找不到就崩溃
super 1.super是编译器指令,并非类或者对象.2.作用:给super发消息,执行父类中对应的方法.3.子类可以重写父类的方法,子类既可以有自己的实现,又有父类继承中的实现,如果想使用父类的实现,需要向super发消息.
初始化方法 1.创建对象分两步:分配内存,初始化.2.初始化方法的主要作用是:为某些实例变量赋值.3.初始化方法在整个对象生命周期里只使用一次.3.父类中声明了公共的实例变量.作为父类也应该有自己的初始化方法,为这些公共实例变量赋初值.4.子类定义了除父类公共实例变量外的实例变量,在自身的初始化方法中,优先向super发送init消息,初始化公共变量,初始化成功后,再初始化自身特有变量,从而完成自身全部实例变量的初始化.
初始化过程 1.执行父类中实现的初始化方法(向上递归到NSObject类中的初始化方法).2.从根类NSObject开始执行初始化方法3.判断父类中的初始化是否成功,即self是否存在.4.完成对象的初始化设置,返回对象.5.初始化子类实例变量.
初始化方法特征 1.初始化方法是”—”号方法.2.以init开头.3.可以带0到多个参数.4.返回值是id或者instancetype类型.5.内部实现:先执行super的初始化方法,再初始化自身变量,最后return self
便利构造器 1.便利构造器在初始化方法的基础上前进了一小步,封装了对象的创建过程.2.便利构造器以”+”方法,返回本类型的实例对象,方法名以类名开头.3.可以有0到多个参数.4.内部实现:封装了alloc和初始化方法,使用起来更加方便.

第三节 属性

日期 任务
setter和getter方法 setter是赋值方法,getter是取值方法
属性 属性是Objective-C 2.0定义的语法为实例提供了setter和getter方法的默认实现,能在一定程度上简化程勋代码,并且增增强实例变量的访问安全性
属性的声明 使用@property声明属性,相当于在@interface里声明了两个方法(setter和getter)
属性的实现 使用@synthesize实现属性,相当于在@implementation中实现了两个方法setter和getter
属性的属性 为属性提供了一些关键字用以控制setter,getter的实现细节,这些关键字称为属性的属性(attribue),一共有三大类attribue
第一类:读写性控制(readonly,readwrite)readonly只声明getter方法,无setter方法,readwrite告诉编译器即声明setter又声明getter
nonatomic 程序开发过程中,setter和getter处处都在用,如果使用atomic,需要不断地队setter,getter加锁解锁以保证线程访问安全,会很占用系统资源,降低系统性能.通常设置为nonatomic,某些属性需要线程安全时,才定义为atomic
属性的属性 第三类:语义设置assign,retain,copy,使用assign修饰属性时,setter,getter内部实现是直接赋值
点语法 点语法是Objective-C 2.0定义的语法格式,提供了一种便捷的属性访问方式.凡是符合系统默认setter,getter书写格式的方法都可以使用点语法

第四节 字符串与数值对象

知识点 注意事项
苹果帮助文档的使用(文档的基本信息) Inherits from 继承自; Conforms to 遵循什么协议; Framework 属于哪个框架 ; Availability 什么时候可用的; Declared in 声明在什么头文件里 ; Related documents 相关文档; Sample code 示例代码
字符串 c语言中,字符串是由char(ASCII)字符构成。 oc中,字符串是由unichar(unicode)字符构成 oc中,字符串分为不可变字符串和可变字符串。 不可变字符串一经创建,内容和长度不可修改 可变字符串创建之后,长度和内容可修改。
不可变字符串的创建 实例方法:-initWithString: -initWithFormat: 便利构造器: +stringWithString: +stringWithFormat:
字符串的常用方法 字符串分割 ;字符串拼接;字符串替换;字符串比较
字符串分割 字符串分割: -substringToIndex: -substringFromIndex: -substringWithRange:
字符串拼接 字符串拼接: -stringByAppendingString:
字符串替换 字符串替换:-stringByReplacingCharactersInRange:withString:-stringByReplacingOccurrencesOfString:withString:
字符串比较 -isEqualToString:
可变字符串(NSMutableString) NSMutableString继承于NSString NSMutableString创建出来的字符串,是 一个动态的可变字符串,可以对其进行增 删改查.
可变字符串(NSMutableString)的创建 实例方法:- initWithFormat: -initWithString: 便利构造器: +stringWithFormat:+stringWithString:
NSMutableString的方法 字符串拼接 -appendString: 字符串插入-insertString: atIndex: 字符串删除-deleteCharactersInRange:
字符串小结 不可变字符串的修改操作,本质就是得到一 个新的字符串。 不可变字符串的修改方法以string开头,有 返回值。 可变字符串的修改方法没有返回值,修改原 字符串。
数值对象的作用 数值对象可以完成标量(int,float,结构体, 指针等)与对象类型的相互转换。
数值对象(NSNumber)常用方法 基本类型(int,float)转换成对象类型; 对象类型转换成基本类型(int ,float)。 +numberWithInt: +numberWithDouble: -intValue -doubleValue
数值对象(NSValue)常用方法 NSValue是NSNumber的父类 结构体转换为NSValue 类型对象 NSValue类型对象转换为结构体 +valueWithRange: +valueWithPointer: - rangeValue - pointerValue

第五节 数组、字典、集合

知识点 注意事项
容器简介 容器类,管理一组对象类型的数据.iOS中存放数据的容器类都称为集合
数组简介 OC中数组是有序集合,只能存放对象类型;数组有下标(index)的概念,靠下标查找元素,下标从0开始;数组分不可变数组(NSArray)和可变数组(NSMutableArray).
不可变数组 数组的创建;获取数组元素个数;根据index获取数组中对象;
不可变数组(NSArray)的创建 常用实例方法:—initWithObjects:常用便利构造器:+arrayWithObjects:
获取元素个数,根据index获取对象 获取元素个数: -count根据index获取对象: -objectAtIndex:
可变数组(NSMutableArray) NSMutableArray是NSArray的子类,继承了NSArray的所有方法可变数组可以在数组本身基础进行增,删,改,查等操作.常用方法:创建数组对象;添加元素,插入元素;删除元素,替换元素;交换指位置的两个元素;
(可变数组)NSMutableArray的创建 实例方法: - initWithCapacity:- initWithObjects: 便利构造器:+ arrayWithCapacity:+ arrayWithObjects:
添加元素,插入元素 添加元素:- addObject:插入元素:- insertObject:atIndex:
删除元素,替换元素 删除元素:- removeObjectAtIndex:- removeLastObject:- removeAllObjects:替换元素:- replaceObjectAtIndex:withObject:
交换指定位置的两个元素 - exchangeObjectAtIndex:withObjectAtIndex:
数组的遍历 数组的遍历:将数组从头到尾全部筛选一遍;通常结合for循环使用,有多少元素就循环多少次;快速遍历for—in
字典简介 对于”name:小三”来讲,key就是”name”,key对应的value是”小三”;字典用于保存具有映射关系(key-value对)数据的集合;一个key-value对认为是一个条目(Entry),字典是存储key-value对的容器
字典特点 与数组不同,字典靠key存取元素;key不能重复,value必须是对象;键值对在字典中是无序存储的;字典分:不可变字典(NSDictionary)和可变字典(NSMutableDictionary)
不可变字典(NSDictionary) 不可变字典一旦创建,键值对就不可更改,不可添加,不可删除.不可变字典仅能被读取key或者value常用方法:创建字典对象获取所有key值,获取所有value值通过key值查询value
不可变字典(NSDictionary)的创建 实例方法:initWithObjectsAndKeys:便利构造器:+ dictionaryWithObjectsAndKeys:
获取所有的key和value,通过key查询value 获取所有key:allKeys获取所有value:allValue通过key查询value:- objectForKey
可变字典(NSMutableDictionary) NSDictionary的子类可以对可变字典的键值对进行增,删,改常用方法:创建可变字典对象添加键值对修改key对应的value删除键值对
可变字典(NSMutableDictionary)的创建 实例方法:- initWithObjectsAndKeys:initWithCapacity:便利构造器:+ dictionaryWithObjectAndKeys:
添加,修改,删除键值对 添加,修改键值对:setValue:ForKey:setObject:ForKey:删除键值对:-removeObjectForKey:
字典的遍历 遍历allKeys遍历allValues遍历所有的键值对
集合 数学中有集合的的概念比如:整数集,自然数集.再比如:集合{1,2,3,4},集合{2,3,5,6}iOS中也有集合类与数学中的集合对应
集合的特点 与数学中的集合一样,集合中的元素唯一存储的元素是无序的存储元素必须是对象类型iOS中用Set表示集合,分NSSet和NSMutableSet
不可变集合(NSSet) 常用方法:创建集合对象获取元素个数获取集合中的某个元素判断集合中是否包含某个对象
不可变集合(NSSet)的创建 实例化方法: initWithObjects:便利构造器:+ setWithObjects:
获取不可变集合(NSSet)的元素个数及某个元素 获取元素个数:count获取某个元素:- anyObject
判断集合是否包含某个元素 - containsObject:
可变集合(NSMutableSet) 常用方法:创建集合对象,添加元素,删除元素
可变集合(NSMutableSet)的创建 实例化方法:initWithObjects:便利构造器:- setWithObjects:
可变集合(NSMutableSet)元素的添加,删除 添加元素:addObject:删除元素:- removeObject:
计数集合特点 NSCountedSet是NSMutableSet的子类能记录元素的重复次数在set的基础上添加了计数功能- countForObject:

第六节 遍历

知识点 注意事项
数组的遍历 NSArray *array = @[@“西游记”,@“三国演义”,@“红楼梦”,@“水浒传”];方法一:for循环:for(int i = 0;i < array.count ;i ++){NSLog(@“%@”,array[i]);}方法二:枚举器:NSEnumerator *enumerator = [array objectEnumerator];NSString *object = nil;while(object = [enumerator nextObject]){NSLog(@“%@”,object);}方法三:快速枚举(for in):for(NSString *object in array){NSLog(@“%@”,object);}
字典的遍历 NSDictionary *dictionary = @{@“name”:@“张三”,@“sex”:@“男”,@“age”:@“20”}方法一:for循环:NSArray *array01 = [dictionary allKeys];for(int i = 0;i < array.count;i++){NSLog(@“%@—%@”,array[i],dictionary[array[i]]);}方法二:枚举器:NSEnumerator *keyEnumerator = [dictionary keyEnumerator]; NSString *key = nil;while(key = [keyEnumerator nextObject]){NSLog(@“%@-%@”,key,dictionary[key]);}方法三:快速枚举(for in):for(NSString *key in dictionary){NSLog(@“%@—%@”,key,dictionary[key]);}
集合的遍历 NSSet *set = [NSSet setWithObjects:@“zhao”,@“qian”,@“sun”,@“li”,nil];方法一:for 循环:NSArray *array = [set allObjects];for(int i = 0; i< array.count;i++){NSLog(@“%@”,array[i]);}方法二:使用枚举器:NSEnumerator *enumerator =[set objectEnumerator];NSString *object = nil;while(object = [enumerator nextObject]){NSLog(@“%@”,object);}方法三:快速遍历(for in):for (NSString *object in set){NSLog(@“%@”,object);
for in 1.是 oc 的快速枚举语法,内部封装了枚举器。2.数组 for in枚举的是数组元素.3.字典 for in枚举的是字典中的 key,因为 key 是唯一的.4.集合 for in 枚举的是集合中的元素;5.如果用 for in 来枚举一个可变容器,不能在枚举期间对容器做任何修改,即:不能添加,删除等。如果需要在枚举期间做修改,请使用普通for 循环,而不要用 for in
不可变数组排序方法 排序方法:NSArray *array02 = [array01 sortedArrayUsingSelector:@selector(compareByNameAscending:)];构建排序描述器:NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@“name”ascending:YES]; NSArray * array02 =[array01 sortedArrayUsingDescriptor:@[descriptor,….]]
可变数组排序方法 排序方法:NSArray *array02 = [array01 sortUsingSelector:@selector(compareByNameAscending:)];构建排序描述器:NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@“name”ascending:YES]; NSArray * array02 =[array01 sortUsingDescriptor:@[descriptor,….]]
SEL 是你数组元素 元素与元素之间 的比较方法,如果数组是 person,就写 person 与 person 的比较方法。如果数组是 string,就写 string 与 string 的比较方法,如果数组是 teacher,就写 teacher 与 teacher 之间的比较方法。总之,数组元素是谁,就让第 j 个元素与第 j+1个元素比,你让它按年龄比,就给它比较年龄的方法,让他按身高比,就给它比较身高的方法。
小结 1.官方推荐的排序方法:使用 NSSortDescriptor(描述器排序)进行排序。这种方式可以实现复杂排序,可以设置n个排序条件,下标0放第一排序条件,下标1放第二排序条件,以此类推。。。2.不可变数组也可以排序,只不过自身不会发生变化,会创建一个新的数组,存放排好序的元素,并把这个数组返回。3.可变数组可以对自身排序4.可变数组排序方法没有返回值。方法名第一个单词,是个动词。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容

  • 下面是我最近两年学习OC中的一些基础知识,对于学习OC基础知识的人可能有些帮助,拿出来分享一下,还是那句话不喜勿喷...
    小小赵纸农阅读 2,555评论 1 7
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,706评论 0 4
  • 一、深复制和浅复制的区别? 1、浅复制:只是复制了指向对象的指针,即两个指针指向同一块内存单元!而不复制指向对象的...
    iOS_Alex阅读 1,351评论 1 27
  • 人们总说,人应该是越来越快乐的,因为能够做越来越多曾经无法办到的。长大了,就能自由的生活;长大了,就能轻易得到曾经...
    落落落离年阅读 228评论 0 0
  • 第一次和蚊子见面是在我们学校北苑下边。之前我们通了电话,我过去的时候就看到一个穿着白色羽绒服的女孩子,站在边上。当...
    doovin阅读 432评论 0 0