OC语言-04-OC语言-核心语法
一、点语法
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> 基本使用
- 通过NSLog函数通过类/对象名以%@输出类/对象相关信息时,会调用相应的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;
}
OC语言-04-OC语言-核心语法的更多相关文章
- oc是一个全动态语言,oc的一切都是基于runtime实现的!
oc是一个全动态语言,oc的一切都是基于runtime实现的! 从以下三方面来理解runtime吧! 1. 传统的面向过程的语言开发,例如c语言.实现c语言编译器很简单,只要按照语法规则实现一个LAL ...
- OC学习2——C语言特性之函数
1.OC是在C语言的基础上进行扩展的,在OC中直接用C语言进行coding也是可以通过编译的.因此,函数定义的语法格式如下: 函数返回值类型 函数名(形参列表) { //由零条或多条可执行性语句组成的 ...
- 04 C语言基本语法
C语言的令牌 C 语言的程序代码由各种令牌组成,令牌可以是关键字.标识符.常量.字符串值,或者是一个符号.例如,下方的C语句包括5个令牌: printf("Hello, World! \n& ...
- 04. Go 语言流程控制
Go 语言流程控制 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go 语言的常用流程控制有 if 和 for,而 switch 和 ...
- 关于初次使用Verilog HDL语言需要懂的基本语法
关于初次使用Verilog HDL语言需要懂的基本语法 1.常量 数字表达式全面的描述方式为:<位宽><进制><数字> 8’b10101100,表示位宽为8的二进制 ...
- C语言标记化结构初始化语法
C语言标记化结构初始化语法 (designated initializer),而且还是一个ISO标准. #include <stdio.h> #include <stdlib.h&g ...
- go语言入门教程:基本语法之变量声明及注意事项
一.变量的使用 1.1 什么是变量 变量是为存储特定类型的值而提供给内存位置的名称.在go中声明变量有多种语法. 所以变量的本质就是一小块内存,用于存储数据,在程序运行过程中数值可以改变 1.2 声明 ...
- C语言ASM汇编内嵌语法
转载:http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html C语言ASM汇编内嵌语法 .3 GCC Inline ASM G ...
- <编译原理 - 函数绘图语言解释器(2)语法分析器 - python>
<编译原理 - 函数绘图语言解释器(2)语法分析器 - python> 背景 编译原理上机实现一个对函数绘图语言的解释器 - 用除C外的不同种语言实现 设计思路: 设计函数绘图语言的文法, ...
- 【C语言】01-C语言概述
说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 为什么iOS开发要先学C语 ...
随机推荐
- CentOS下Tmux安装和使用
Tmux介绍: Tmux是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活.动态的进行各种布局和操作.它可以做到一条命令就启动起来( ...
- html5 自定义数据属性 ,也就是 data-* 自定义属性---笔记。
html5 自定义数据属性 ,也就是 data-* 自定义属性. 例如 <div data-last-value="43" data-hidden="true& ...
- Android获取屏幕长宽
总结了下,我遇到的获取Android屏幕长宽的方式总共有三种.大同小异,重点在于如何获取系统中的WindowManager管理类对象,方可对数据的操作: 代码如下 /** * @return 屏幕的长 ...
- 为sourceinsight添加makefile、kconfig、*.S文件支持
转载:http://www.cnblogs.com/myblesh/articles/2452030.html 大家用source insight看linux源码的时候都遇到这么一个麻烦,make ...
- debian之samba服务器搭建
安装过程非常简单: apt-get install samba sudo vim /etc/sama/smb.conf [pengdl] comment = pengdl's samba path = ...
- 【转载】C/C++ 函数指针 总结
转载自:http://blog.csdn.net/shihui512/article/details/9787125 什么是函数指针函数指针的声明函数指针的赋值函数指针的使用将函数作为其他函数的参数在 ...
- 初涉SQL Server性能问题(1/4):服务器概况
当你作为DBA时,很多人会向你抱怨:“这个程序数据加载和蜗牛一样,你看看是不是服务器出问题了?”造成这个问题的原因有很多.可能是程序应用服务器问题,网络问题,程序实现方式问题,数据库服务器负荷过重.不 ...
- sublime text3 安装package
在sublime text2中安装package control插件的时候是执行python: import urllib2,os; pf='Package Control.sublime-packa ...
- 转载:第四弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿,每日更新!
感谢大家支持!博卡君周末休息了两天,今天又回到战斗状态了.上周五晚上微信放出官方工具和教程了,推荐程序猿小伙伴们都去试一试,结合教程和代码,写写自己的 demo 也不错. 闲话不多说,开始更新! 第七 ...
- 【循序渐进学Python】12.Python 正则表达式简介
正表达式就是一段匹配文本片段的模式,在Python 中 re 模块包含了对正则表达式(regular expression)的支持. 1. 正则表达式的基本概念 1. 通配符 点号( . )可以匹配换 ...