Objective-C 语法总结

来源:互联网 发布:蓝牙鼠标怎么连接mac 编辑:程序博客网 时间:2024/05/01 05:58
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.显示当前用户名 who2.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 协议名 <其他协议名>,该协议就会遵守其他协议的方法            子类会继承父类遵守的协议            只有一个类遵守协议,可以直接把协议写在类中,不用另建协议头文件

0 0