Objective-C 语法总结
2015-03-19 16:41
351 查看
1.mac终端命令 >1.定时关机 sudo shutdown -h 1512122359; 2015年12月12日23点59分关机 >2.结束进程 sudo kill 577; 结束进程577 >3.目录名 ls -l 详细信息 -a 包括隐藏文件 例: 想看看跟目录下有什么, ls / 想看看驱动目录下有什么, ls /System/Library/Extensions >4.转换目录 cd 例:想到驱动目录下溜达一圈 cd /System/Library/Extensions >5.建立新目录 mkdir 目录名 例:在驱动目录下建一个备份目录 backup mkdir /System/Library/Extensions/backup 在桌面上建一个备份目录 backup mkdir /User/用户名/Desktop/backup >6.拷贝文件 cp 参数 源文件 目标文件 cp -R /User/用户名/Desktop/Natit.kext /System/Library/Extensions >7.查看当前文件夹 pwd >8.新建一个文件 touch touch (路径)文件名 后缀名 >9.打开一个文件 open open (路径)文件名 后缀名 >10.显示当前用户名 who 2.Objective-c >1. OC常用语法 @interface、@implementation、@end、@public、@protected、@private @class、@property、@synthesize @NSString >2. NSLog 与 printf 的区别 NSLog 接收OC字符串作为参数,printf接收C语言字符串作为参数 NSLog 输出后会自动换行,printf输出后不会自动换行 使用 NSLog 需要 #import <Foundation/Foundation.h> 使用 printf 需要 #include <stdio.h> >3. #import 拷贝 "xxx.x" 或 <xxx.x> 文件的内容 可以自动防止内容被拷贝多次 >4. Foundation 框架的作用 开发OC、IOS、Mac程序必备的框架 此框架中包括了很多常用的 API(应用编程接口) 框架中包含了很多头文件,若想使用整个框架的内容,包含它的主头文件即可 >5. BOOL 的使用 BOOL 类型本质 typedef signed char BOOL BOOL 类型变量有 2 种取值:YES、NO #define YES (BOOL)1 #define NO (BOOL)0 >6. set方法和get方法(多词变量名使用驼峰) - (void)setX:(int)x andY:(int)y; { _x = x; _y = y; } - (int)x; { return _x; } >7. @property 和 @synthesize @property 变量类型 变量名 相当于在@interface中声明了一个变量,同时声明了set和get方法 例如:@property int x; 相当于 { int _x; } - (void)setX:(int)x; - (int)x; @synthesize 变量名 = _变量名; 相当于在@implementation中实现了一个set和get方法 - (void)setX:(int)x { _x = x; } - (int)x { return _x; } 如果只写@property默认会在@implementation中实现@synthesize >8. NSObject 父类与子类 NSObject 是 first-class objects,这是所有类的父类 如 Person : NSObject 为 子类继承父类 子类会拥有父类的所有变量和方法 子类可在父类的基础上扩充变量与方法 子类方法是先从子类查找,然后向上查找 子类于父类不能有相同的成员变量 >9. 多态 子类 Student 继承父类 Person Person * p = [[Student alloc] init]; 这种将子类赋给父类的方式称为多态 优点:父类接收参数、节省代码 缺点:不能访问子类属性 >10. 分类category 在不改变原类文件的前提下,扩充方法有:继承、分类 创建一个类的副类 如Person.h 可创建category Person+1.h 并在其中添加方法,方法同名会优先使用副类 分类不能增加变量 多个分类实现相同方法,最后一个编译的分类会覆盖前面的方法 >11. 类本质与获取类对象 类是class类型的对象,称为类对象 Class c = [Person class]; c指向类对象 //类方法 或者 Person * p = [[Person alloc] init]; Class c2 = [p class]; //对象方法 >12. +load 和 +initalize 程序启动时会加载所有的类和分类,所有类的+load方法都会被执行 优先加载父类,其次是子类,最后才是分类category 第一次使用某个类时,会调用+initialize方法,同样是先父类后子类 >13. description方法 description为描述方法,使用 NSlog 和 %@ 输出某对象时,会调用对象的 -description方法 默认会输出对象的类名称与对象地址, 在-description方法 return [NSString stringWithFormat:%"xxx"]; 会输出xxx内容,不再输出类名与对象地址 description也可以是类方法 >14. SEL 每一个方法名都是以SEL类型的变量存储的 实际上是寻找名为test的SEL变量 如- (void)test Person * p = [[Person alloc] init]; [p test] 相当于 [p perfromSelector:@Selector(test)] >15. NSLog增强 __FILE__ : 源代码路径文件名 __LINE__ : 当前行数 _cmd : 当前方法的SEL >16. 内存管理 每当使用alloc、new、copy操作时,新对象的retainCount计数为1 当retainCount为0时,对象将被dealloc 计数器操作:retain、release、retainCount >17. set方法 @property 内存管理 set方法参数为对象时,应对原对象release,并对新对象retain - (void)setPerson:(Person *)P { if (_person != p) { [_person release]; _person = [p retain]; } } - (void)dealloc { [_person release]; [super dealloc]; } 对对象使用retain,则必须在dealloc中对对象使用release 对象的dealloc方法必须在最后调用[super dealloc] @property (nonatomic,retain,readwrite) Person * p; 多线程:nonatomic为高性能声明,默认为atomic为低性能声明 成员变量为对象时,应加上retain 一般则为assign @property默认声明为readwrite可读可写变量,只读是readonly 在括号中加入setter=xxx: 修改setter声明名称 例如 [p setAge:20] 用 [p xxx:20] >18. 循环引用 在类的声明中,声明其他类时,用 @class 类名; 在类的实现中,实现其他类时,用 import "类名.h" 循环引用时,一方retain改成assign,且dealloc方法不对其使用release >19. autoreleaserpool 自动释放池 在结束时自动释放内存 释放池为栈结构,先进后出 NSString对象不用release >20. ACR 自动内存管理 只要还有一个强指针指向对象,对象就不会dealloc 默认所有实例变量和局部变量都为strong指针 weak指针为回收后,指针会指向nil 所有需要retain的对象,在@property中应该改为strong,其他用weak或不写 基本数据类型依然用assign 循环引用时,一端用weak,一端用strong,weak的对象会优先dealloc >21. block 默认情况,block内部不能修改外部局部变量,只能访问 给局部变量加上 __block 关键字,变量可在block中访问 __block int a = 10; void (^block)(void) = ^(void) { a = 25; }; 可利用typedef定义block类型声明 >22. protocol 协议 用来声明一大堆方法,不能声明成员变量 只要类遵守这个协议,就可以使用protocol的所有方法 新建protocol文件,并在类声明里#import“ProtocolName.h” 遵守协议 @interface ClassNamen : FacherClass <ProtocolName, ProtocolName2, ...> 在加入protocol协议后,可在类实现中调用protocol声明的方法 protocol文件中,方法必须实现在方法前加上@required(默认方式),可选实现@optional 基协议 在protocol文件中 @protocol 协议名 <其他协议名>,该协议就会遵守其他协议的方法 子类会继承父类遵守的协议 只有一个类遵守协议,可以直接把协议写在类中,不用另建协议头文件
相关文章推荐
- Objective-C语法小总结
- 【IOS 开发学习总结-OC-12】★objective-c面向对象之——合成存取方法与点语法
- #Objective - C NSString的常用语法点总结
- 《黑马程序员》 细节总结(Objective - c语法)
- 11-Objective-C特有语法:内存管理总结
- Objective-C语法之动态类型常用方法总结
- Objective-C字面量语法总结
- iOS开发 入门学习总结(二)Objective-C 语法特性总结
- Objective-C语法总结
- Objective-C字面量语法总结
- Objective-C的基础语法总结
- Objective C Programming( OC ) 语法特点总结
- 黑马程序员——Objective-C基础——语法总结
- 【黑马程序员】---Objective-C核心语法总结
- Objective-C字面量语法总结
- Objective-C语法总结收集
- 黑马程序员——Objective-C之特殊语法总结
- Objective-C语法基础:面向对象编程特点的总结
- 黑马程序员——Objective-C语言知识点总结之OC特有语法
- 小寒假第七天总结 转 Objective-C语法: