//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, 用于对象类型, 并且遵守<NSCopying>
//注:如果属性是用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, 复制一个新的对象, 必须遵守<NSCopying>, 完成copyWithZone:方法的实现, 引用计数从0变1
//7.new, [NSObject new]相当于[[NSObject alloc] init], 引用计数从0变1 NSDictionary *dic = [NSDictionary dictionary];

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

OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏的更多相关文章

  1. shell入门之函数应用 分类: 学习笔记 linux ubuntu 2015-07-10 21:48 77人阅读 评论(0) 收藏

    最近在学习shell编程,文中若有错误的地方还望各位批评指正. 先来看一个简单的求和函数 #!/bin/bash #a test about function f_sum 7 8 function f ...

  2. ubuntu中安装jdk 分类: java 学习笔记 linux ubuntu 2015-07-06 17:49 74人阅读 评论(0) 收藏

    参考文献:ubuntu 13.04 安装 JDK 先去oracle官网下载jdk,这一段我就不赘述了. 下载好之后先解压,解压方式参见 linux常用的压缩与解压缩命令 ,解压之后,将文件剪贴至/us ...

  3. linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏

    1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...

  4. linux常用的压缩与解压缩命令 分类: 学习笔记 linux ubuntu 2015-07-05 19:38 38人阅读 评论(0) 收藏

    1.gzip 压缩 gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件] 2.gunzip 解压 这个命令与gzip的功能刚好相反,这个是解压. 用法 gunzip 选项 [ ...

  5. ubuntu14.04使用root用户登录桌面 分类: 学习笔记 linux ubuntu 2015-07-05 10:30 199人阅读 评论(0) 收藏

    ubuntu安装好之后,默认是不能用root用户登录桌面的,只能使用普通用户或者访客登录.怎样开启root用户登录桌面呢? 先用普通用户登录,然后切换到root用户,然后执行如下命令: vi /usr ...

  6. linux中echo的用法 分类: 学习笔记 linux ubuntu 2015-07-14 14:27 21人阅读 评论(0) 收藏

    1.echo命令我们常用的选项有两个,一个是-n,表示输出之后不换行,另外一个是-e,表示对于转义字符按相应的方式处理,如果不加-e那么对于转义字符会按普通字符处理. 2.echo输出时的转义字符 \ ...

  7. shell脚本调试 分类: 学习笔记 linux ubuntu 2015-07-14 12:49 53人阅读 评论(0) 收藏

    1.sh -x script 这将执行脚本并显示所有变量的值 如,脚本: #!/bin/bash #a test about shift if [ $# -le 0 ] then echo " ...

  8. shell入门之流程控制语句 分类: 学习笔记 linux ubuntu 2015-07-10 16:38 89人阅读 评论(0) 收藏

    1.case 脚本: #!/bin/bash #a test about case case $1 in "lenve") echo "input lenve" ...

  9. shell入门之变量测试 分类: 学习笔记 linux ubuntu 2015-07-10 15:49 31人阅读 评论(0) 收藏

    格式:test 测试条件 字符串测试: 注意空格: test str1 == str2 测试字符串是否相等 test str1 != str2 测试字符串是否不相等 test str1 测试字符串是否 ...

  10. shell脚本实现冒泡排序 分类: 学习笔记 linux ubuntu 2015-07-10 14:16 79人阅读 评论(0) 收藏

    手动输入一行字符串,并对其排序. 脚本如下: #!/bin/bash #a test about sort echo "please input a number list" re ...

随机推荐

  1. ubuntu-server14.04 网络配置

    一.启动网卡 ubuntu server 安装后,ifconfig 发现只有一个lo 和一个p1p1 网卡, 先查看服务器网卡:ifconfig -a ,发现有lo ,p1p1,p2p1,p3p1,p ...

  2. [osg]osg自定义事件的理解

    参考:http://blog.csdn.net/l_andy/article/details/51058907 添加自定义事件 首先osg在其内部通过osgGA::EventQueue类维护了一个事件 ...

  3. AngularJs filter 过滤器基础【转】

    Filter Ng里的过滤器. currency:把一个数字格式化成货币模式(如$1,234.56).当没有提供任何货币符号时,默认使用当前区域的符号. 使用: HTML:{{ currency_ex ...

  4. C#匿名对象序列化

    //匿名对象序列化 }; Console.WriteLine(JsonConvert.SerializeObject(obj)); //匿名集合序列化 List<object> list ...

  5. 我理解的NODE

    简介:NODE不是我们想象中的后台语言,它不是一门语言,它是一个和浏览器类似的工具或者平台,在NODE平台中,可以把我们写的JS代码解析出来,而且NODE和谷歌浏览器一样都是采用V8引擎渲染解析的. ...

  6. 字 字节 比特,以及各个算数类型所占用的大小范围 c++

    字 储存的基本单元,. 1字=4/8字节 字节 byte 字节是计算机中数据处理的基本单元. 1byte=8bit 比特(bit/位) 表示二进制位,计算机内部数据储存的最小单位 例如 1011是一个 ...

  7. 模拟模拟vij1120

    花生采摘 描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”. 鲁宾逊先生和多多都很开心,因为花生正 ...

  8. Mac XMind8 保存时报错

    错误提示 截图 日志 查看错误日志的方式:打开xmind –> 关于xmind –> 安装细节 –> 选项卡 “配置” –> 查看错误日志 看到有Caused by: org. ...

  9. h5请求跨域问题Access-Control-Allow-Origin解决跨域

    访问后端接口报错:No 'Access-Control-Allow-Origin' header is present on the requested resource 解决: Access-Con ...

  10. Qt经典—线程、事件与Qobject

    介绍 You’re doing it wrong. — Bradley T. Hughes 线程是qt channel里最流行的讨论话题之一.许多人加入了讨论并询问如何解决他们在运行跨线程编程时所遇到 ...