博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
史上OC重点最全总结!
阅读量:4087 次
发布时间:2019-05-25

本文共 6700 字,大约阅读时间需要 22 分钟。

 //OC: Objective-C, 面向对象的C语言                //OC与C的区别        //1.OC是C的超集, C语言的所有语法都可以在OC中使用        //2.OC是面向对象        //3.OC是一门运行时语言        //4.OC的类库丰富                NSString *string = [[NSObject alloc] init];        //string在编译时是NSString类型, 在运行时是NSObject类型                //面向对象的编程: OOP        //面向对象编程的核心: 类与对象        //面向对象的三大特性: 封装, 继承, 多态                //类与对象的关系:        //1.类是对象的类型(抽象)        //2.对象是类的实例                //如何识别类与对象:        //是否具体到某个事物                //如何定义一个类:        //1.选择Cocoa Touch Class        //2.写上类名(大驼峰法)        //3.选择父类NSObject        //4.自动生成.h和.m文件        //5..h写实例变量和方法的声明;.m写方法的实现        //6.优化: 重写description方法                //如何创建对象:        //1.引入头文件        //2.开辟内存空间alloc        //3.初始化        NSObject *object = [[NSObject alloc] init];        //注:1.对象要加*        //2.开辟内存空间和初始化要合在一起                        //#include, #import, @class的区别        //1.#import相比于#include, 能够防止重复引用        //2.@class相比于#import, 没有真实引入头文件, 只是告诉编译器这个一个类, 一般配合使用, 在.h中使用@class, 在.m中使用#import                //类的构成        //1.从文件上分: .h和.m, .h中的代码要写在@interface和@end之间, .m中的代码要在@implementation和@end之间        //注:类名和文件名没有直接的关系, 保持一致是为了方便管理        //2.从功能上分: 特征和行为, 特征->实例变量, 行为->方法, 实例变量写在.h, 方法的声明写在.h, 方法的实现写在.m                //实例变量的可见度        //1.public, 公开        //2.protected, 受保护        //3.private, 私有        //注: 修饰符的作用范围: 到下一个修饰符, 或者到大括号}结束                //            类的内部        类的外部        //public     实例变量名     对象->实例变量名        //protected  实例变量名  不能访问(使用setter和getter)        //private    实例变量名  不能访问(使用setter和getter)        //注: private修饰的实例变量, 子类不能继承                //方法的分类        //1.根据调用方式: 类方法(+)和实例方法(-), 类方法由类调用, 实例方法由对象调用        //注:类方法的内部不能够访问实例变量                //2.根据参数个数:        //a.无参数        //+/- (返回值类型)方法名;        //b.一个参数        //+/- (返回值类型)方法名:(参数类型)参数名;        //注:参数是对象时, 类型要加*        //c.多个参数        //+/- (返回值类型)方法名1:(参数类型1)参数名1 方法名2:(参数类型2)参数名2 ...;        //注:1.每一个参数对应一个冒号        //2.冒号是方法名的一部分        //3.方法的每一段都是小驼峰法命名        //4.方法的每一段之间加空格                //3.根据是否在.h中写声明        //a.公开方法        //b.私有方法(没有写声明, 或者把声明写在Extension内)                //方法的调用        //[类名 类方法名]        //[对象 实例方法名]        //OC中方法的调用的实质: 消息机制, [消息接收者 消息]                //特殊的方法(以NSString *name为例)        //1.setter        //- (void)setName:(NSString *)name        //2.getter        //- (NSString *)name        //3.init        //- (id)init        //4.自定义初始化方法        //- (id)initWithName:(NSString *)name        //5.便利构造器        //+ (id)personWithName:(NSString *)name                //OC继承的特点        //1.单向继承: 一个父类可以有多个子类, 一个子类只能有一个父类        //2.单根继承: 所有的类都继承于NSObject, NSObject是基类                //子类可以继承父类:        //1.非private的实例变量        //2.非私有的方法                //有了继承以后, 在解决问题时        //多个类如果具有相同的特征和行为, 会把这个些特征和行为写到父类里, 子类内部只写自己独有的特征和行为                        //OC中常见的数据类型        //1.NSInteger, 64位下是long, 非64位下是int        //2.CGFloat, 64位下是double, 非64位下是float        //3.NSNumber, 基本数据类型转化为对象        //4.NSString 和 NSMutableString        NSString *str = @"iPhone";        NSLog(@"%d", str.retainCount);//溢出, -1        //5.NSArray 和 NSMutableArray        //6.NSDictionary 和 NSMutableDictionary        //7.NSSet 和 NSMutableSet        //8.NSDate        //9.NSDateFormatter        //10.NSTimeInterval, 相当于double        //11.NSComparisonResult        //12.NSRange        //13.NSTimeZone        //14.id, 相当于void *, 可以代指任何的对象类型                //NSArray, NSDictionary, NSSet的区别        //NSArray, 有序, 元素是对象, 通过下标访问元素        //NSDictionary, 无序, 元素是key-value形式出现, key是唯一的, 通过key访问value        //NSSet, 无序, 元素不能重复                //block        //实质是匿名函数                //block的语法借鉴了函数指针的语法                //int maxValue(int a, int b)                //block的类型: int (^)(int, int)                //使用typedef重命名block类型        typedef int (^BlockType)(int, int);                //定义一个block变量        int (^blockName)(int, int);        BlockType blockName1;                //block的实现部分        blockName = ^(int a, int b) {            return a + b;        };                //完整的block        int (^blockName2)(int, int) = ^(int a, int b) {            return a + b;        };                //block的调用        int sum = blockName2(2, 3);                //遍历数组        /*         for (<#initialization#>; <#condition#>; <#increment#>) {         <#statements#>         }         */                /*         for (<#type *object#> in <#collection#>) {         <#statements#>         }         */                //数组排序        NSArray *array = [NSArray arrayWithObjects:@"1", nil];                NSArray *sortArray = [array sortedArrayUsingSelector:@selector(compare:)];                [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {            if ([obj1 intValue] > [obj2 intValue]) {                return NSOrderedDescending;            } else if ([obj1 intValue] == [obj2 intValue]) {                return NSOrderedSame;            } else {                return NSOrderedAscending;            }        }];                //语法糖        //@"", NSString        //@12, NSNumber        //@[@"1", @"2"], NSArray        //array[1], 取数组的第二个元素        //@{@"1": @"111", @"2": @"222"}, NSDictionary        //dictionary[@"1"], 取key为@"1"对应的value值                //类的扩展                //1.对已知类的扩展        //a.直接修改        //b.extension, 扩展私有的方法 和 实例变量                //2.对未知类的扩展        //a.继承        //b.category, 添加方法, 但是不能添加实例变量                //3.protocol, 只定义方法的声明, 所有类都可以遵守这个协议, 并完成方法的实现                //设计模式: 代理或委托(Delegate)                Man *man = [[Man alloc] init];                Girl *girl = [[Girl alloc] init];                man.delegate = girl;                [man cook];        [man wash];                //属性 -> setter和getter -> 点语法                //属性:        //声明 @property        //实现 @synthesize                //属性的修饰符                //1.访问控制组        //atomic, 原子性, setter和getter互斥, 比较安全, 但效率低, 默认值        //nonatomic, 非原子性, 效率高        //注:属性用atomic修饰, 不允许重写getter和setter方法                //2.内存管理组        //assign, 用于基本数据类型(特殊:delegate属性使用assign), 默认值        //retain, 用于对象类型        //copy, 用于对象类型, 并且遵守
//注:如果属性是用retain和copy修饰, 一定要再dealloc中进行release //3.读写组 //readwrite, 帮你生成setter和getter, 默认值 //readonly, 只生成getter //4.方法重命名组 //setter=方法名 //getter=方法名 //内存管理的操作 //1.alloc, 开辟内存空间, 引用计数从0变1 //2.retain, 引用计数+1 //3.release, 引用计数-1 //4.dealloc, 不能手动调用, 当引用计数从1变成0时, 系统调用, 收回内存空间 //5.autorelease, 在未来的某段时间引用计数-1 //6.copy, 复制一个新的对象, 必须遵守
, 完成copyWithZone:方法的实现, 引用计数从0变1 //7.new, [NSObject new]相当于[[NSObject alloc] init], 引用计数从0变1 NSDictionary *dic = [NSDictionary dictionary];

转载地址:http://acuii.baihongyu.com/

你可能感兴趣的文章
pinyin4j:拼音与汉字的转换实例
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Kafka | 请求是怎么被处理的?
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
线性数据结构学习笔记
查看>>
数据结构与算法10-冒泡排序、插入排序、选择排序
查看>>
数据结构与算法14-跳表
查看>>