OC核心语法
2015-11-09 21:36
218 查看
一、点语法
1> 基本使用
点语法本质上是set方法/get方法的调用
2> 使用注意
若出现在赋值操作符的右边,在执行时会转换成get方法
若出现在赋值操作符的左边,在执行时会转换成set方法
不能在set、get方法中用self使用点语法,会造成死循环
二、property和synthesize关键字
1> @property
作用
使用注意
2> @synthesize
作用
使用注意
三、id类型
1> 基本含义
万能指针,可以指向任何OC对象
可以理解为NSObject *
2> 使用注意
id在定义变量时不要加上符号*,其本身已经包含
四、构造方法
1> 作用
用来初始化对象,返回一个初始化好的对象
2> 关于+new方法
+new等价于+alloc方法和-init方法
+alloc方法和-init方法
3> 重写-init方法的步骤
调用super的-init方法
进行子类成员变量的初始化
返回初始化完毕的对象
4> 自定义-init方法
适用场合
规范
五、分类(category)
1> 作用
在不改变原来类的基础上为类扩充一些方法
通常作用与大型的类,将类的不同类型的方法,写在不同的分类中
2> 定义
分类的定义与类的定义相似,在类名后面用小括号指明分类的名字
分类通常以模块命名
3> 使用注意
分类只能为类扩充方法,不能扩充成员变量
分类方法的实现中可以访问原来类中的成员变量
在分类中实现原来类的方法,会造成原来类中方法的实现失效
调用方法时,优先在分类中查找,然后在原来类中查找,最后才在父类中查找
在原来类的多个分类查找方法时,优先在最后编译的分类中查找
六、NSString类
1> NSString *与char *
NSString *
char *
2> NSString与NSMutableString
NSString创建的字符串对象是不可改变的,NSMutableString创建的字符串对象是可改变的
3> NSString的方法
NSString的子类必须实现的两个方法
初始化方法
读取文件中字符串的方法
获取网络中字符串的方法
字符串操作的方法
七、description方法
1> 基本使用
,会调用相应的description方法
可以重写description方法,使其能够通过类/对象名输出期望的信息
2> +description与-description
+description方法
-description方法
八、SEL类型
1> 基本使用
含义
作用
2> 通过SEL类型间接调用方法的方式
通过方法名间接调用
通过字符串形式的方法名间接调用
九、示例
1> 基本使用
点语法本质上是set方法/get方法的调用
2> 使用注意
若出现在赋值操作符的右边,在执行时会转换成get方法
若出现在赋值操作符的左边,在执行时会转换成set方法
不能在set、get方法中用self使用点语法,会造成死循环
二、property和synthesize关键字
1> @property
作用
① 自动生成某个成员变量的set方法和get方法
使用注意
① 只能出现在@interface中 ② 可以使用逗号运算符为多个同类型的成员变量生成setter和getter ③ 为了与点语法匹配,使用@property的成员变量不要以下划线开头 ④ @property可以同时完成@synthesize的任务 ⑤ @property默认生成的成员变量是@private类型的以下划线开头
2> @synthesize
作用
① 自动生成某成员变量的setter和getter的实现 ② 可以指定要访问的成员变量的名字,通常是以下划线开头
使用注意
① 只能出现在@implimentation中 ② 可以使用都好运算符同时生成多个setter和getter的实现 ③ 若未指定要访问的成员变量,默认会访问生成@synthesize后名字一 样的成员变量 ④ 若访问的成员变量未找到,将会自动生成@private类型的以下划线 开头(或与@synthesize后名字一样的)的成员变量
三、id类型
1> 基本含义
万能指针,可以指向任何OC对象
可以理解为NSObject *
2> 使用注意
id在定义变量时不要加上符号*,其本身已经包含
四、构造方法
1> 作用
用来初始化对象,返回一个初始化好的对象
2> 关于+new方法
+new等价于+alloc方法和-init方法
+alloc方法和-init方法
① +alloc方法 1)返回值为id类型 2)为对象分配内存空间,并返回该对象 ② -init方法 1)返回值为id类型 2)初始化当前对象,并返回初始化好的对象
3> 重写-init方法的步骤
调用super的-init方法
① 初始化父类中的成员变量和其他属性 ② 返回当前对象,并赋值给self ③ 根类将isa指针初始化为最初调用init方法的类
进行子类成员变量的初始化
返回初始化完毕的对象
4> 自定义-init方法
适用场合
① 当初始化成员变量时,需要将成员变量初始化不同的值,通常需要自 定义-init方法,将指定的值作为-init方法的参数
规范
① 一定是对象方法,以-开头 ② 返回值一定是id类型 ③ 方法名一定以init开头
五、分类(category)
1> 作用
在不改变原来类的基础上为类扩充一些方法
通常作用与大型的类,将类的不同类型的方法,写在不同的分类中
2> 定义
分类的定义与类的定义相似,在类名后面用小括号指明分类的名字
分类通常以模块命名
3> 使用注意
分类只能为类扩充方法,不能扩充成员变量
分类方法的实现中可以访问原来类中的成员变量
在分类中实现原来类的方法,会造成原来类中方法的实现失效
调用方法时,优先在分类中查找,然后在原来类中查找,最后才在父类中查找
在原来类的多个分类查找方法时,优先在最后编译的分类中查找
六、NSString类
1> NSString *与char *
NSString *
① NSString \*指向OC字符串对象的指针 ② NSString是OC字符串类封装了字符串相关操作的方法
char *
① char \*创建的是指向C语言字符或字符串的指针 ② char \*只能存储字符指针或字符串指针,没有相关操作
2> NSString与NSMutableString
NSString创建的字符串对象是不可改变的,NSMutableString创建的字符串对象是可改变的
3> NSString的方法
NSString的子类必须实现的两个方法
① -length 对象方法,获取字符串的长度 ② -characterAtIndex: 对象方法,获取字符串指定索引位置的字符
初始化方法
① +(NSString*)stringWithString: 类方法,创建一个字符串常量,在 Xcode6.0中已经没有该方法,用字符串常量直接创建 ② +(NSString*)stringWithFormat: 类方法,合成一个新的字符串 ③ -(NSString*)initWithString: 对象方法,在字符串对象初始化时,为 其赋值一个字符串常量 ④ -(NSString*)initWithFormat: 对象方法,在字符串对象初始化时,为 其赋值一个新合成的字符串
读取文件中字符串的方法
+(NSString*)stringWithContentsOfFile: encoding: error: 类方法
获取网络中字符串的方法
+(NSString*)stringWithContentsOfURL: encoding: error: 类方法
字符串操作的方法
① 获取字符串指定范围的子串 -(NSString *)substringWithRange: 对象方法,NSRange是结构体 类型,返回子串 ② 将字符串中指定范围内的子串替换为指定的字符串 -(NSString *)stringByReplacingCharactersInRange: withString: 对象方法,返回行的字符串 ③ 求子串在母串中的范围 -(NSRange)rangeOfString: 对象方法,返回NSRange类型 ④ 比较两个字符串内容是否相同 -(BOOL)isEqualToString:(NSString *)aString 对象方法,返回BOOL 类型 ⑤ 比较两个字符串的大小 -(NSComparisonResult)compare:(NSString *)aString 对象方法, 返回NSComparisonResult枚举类型 ⑥ 用指定的字符串分割字符串 -(NSArray *)componentsSeparatedByString:(NSString *)separator 对象方法,返回NSArray数组类型指针
七、description方法
1> 基本使用
,会调用相应的description方法
可以重写description方法,使其能够通过类/对象名输出期望的信息
2> +description与-description
+description方法
① 类方法,默认输出格式为:类名 ② 返回值为NSString *类型
-description方法
① 对象方法,默认输出格式为<类名:内存地址> ② 返回值为NSString *类型 ③ 不要在-description方法中用NSLog函数一%@格式输出self
八、SEL类型
1> 基本使用
含义
① SEL本质上是一个指针类型的数据 ② 保存的是方法的地址
作用
① 将方法包装成SEL类型的数据 ② 每个对应一个唯一的SEL类型数据 ③ 通过SEL类型的数据可以间接调用类/对象方法
2> 通过SEL类型间接调用方法的方式
通过方法名间接调用
① @selector(方法名),返回一个与参数对应的SEL类型的数据 ② performSelector:(SEL),通过SEL类型的数据间接的调用类/对象方 法 ③ performSelector:(SEL) WithObject:(id),通过SEL类型数据调用含 参数的类/对象方法
通过字符串形式的方法名间接调用
① NSSelectorFromString: 将字符串类型的方法名转换成该方法对应的 SEL类型的数据 ② NSStringFromSelector: 将SEL类型的数据转换成字符串类型的方法 名 ③ 通过转化得到到SEL类型数据,再间接调用方法
3> _cmd的使用
_cmd代表当前方法对应的SEL类型数据 不能在方法中通过_cmd间接调用方法,会引发死循环
九、示例
/* 1.创建一个Person类,属性:name; 2.自定义init方法,在初始化是制定每个Person对象的name 3.为Person类添加一个包含运动方法的分类,名字为Sports 4.重写-description方法,使其输出Person对象时,输出该对象的name属性 5.通过SEL间接调用方法 */ #import <Foundation/Foundation.h> /*****定义Person类*****/ @interface Person : NSObject //用@propert声明成员变量,且省略@synthesize @property NSString *name; /*自定义构造方法,在Person对象被初始化时 给成员变量name赋予制定的值*/ - (id)initWithName:(NSString *)name; //判断两个人的名字是否相同 - (void)isSameName:(Person *)p; @end /***Person类的实现***/ @implementation Person - (NSString *)description { return self.name; } - (id)initWithName:(NSString *)name { self.name = name; return self; } - (void)isSameName:(Person *)p { /*调用NSString的对象方法isEqualToString 判断两个人的名字是否相同*/ if ([self.name isEqualToString:p.name]) { NSLog(@"\n这两个人的名字都为:%@", self); } //通过重写的description方法通过对象名输出该对象的属性 NSLog(@"\n这两个人的名字分别为:%@\t%@", self, p); } @end /****为Person类增加一个分类****/ @interface Person (Sports) //为Person类添加打乒乓球这个方法 - (void)playTableTennis; //为Person类添加打篮球这个方法 - (void)playBasketball; @end /**Person的分类Sports的实现**/ @implementation Person (Sports) - (void)playTableTennis { NSLog(@"\n%@正在打乒乓球", self); } - (void)playBasketball { NSLog(@"\n%@正在打篮球", self); } @end /*****测试函数main*****/ int main() { @autoreleasepool { //定义两个字符串,用于存放两个名字 NSString *str = @"Tom"; NSString *str2 = @"Jack"; //定义两个Person对象,并调用重写的构造方法 Person *p = [[Person alloc] initWithName:str]; Person *p2 = [[Person alloc] initWithName:str2]; //通过方法名间接调用方法 [p performSelector:@selector(isSameName:) withObject:p2]; //通过字符串形式的方法名间接调用方法 [p performSelector:NSSelectorFromString(@"playBasketball")]; } return 0; }
相关文章推荐
- 字符编码终结篇
- fragment、国际化
- 关于更换百度地图默认位置之后如果出现还是先出现北京然后再是当前的地址的问题解决办法
- 拥抱Android:编译nginx搭建移动平台
- Jmeter 安装
- 状态机模式
- hdu 1114 Piggy-Bank
- android面试小得
- 嵌入式系统安全复习(一)
- 框架的重装时代
- IOS 的调试模式
- 从编辑懂工程
- Scrum Meeting---Ten(2015-11-5)
- 黑马程序员——基础知识——继承
- linux文件权限与目录配置
- angular下拉列表
- mysql文件导入到数据库load data infile into table 的使用例子
- 二分图最大匹配总结
- 假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd
- 字符串的查找--KMP算法