您的位置:首页 > 移动开发 > Objective-C

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 协议名 <其他协议名>,该协议就会遵守其他协议的方法
子类会继承父类遵守的协议
只有一个类遵守协议,可以直接把协议写在类中,不用另建协议头文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: