博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC语言-04-OC语言-核心语法
阅读量:4691 次
发布时间:2019-06-09

本文共 5118 字,大约阅读时间需要 17 分钟。

一、点语法

1> 基本使用

  • 点语法本质上是set方法/get方法的调用

2> 使用注意

  • 若出现在赋值操作符的右边,在执行时会转换成get方法
  • 若出现在赋值操作符的左边,在执行时会转换成set方法
  • 不能在set、get方法中用self使用点语法,会造成死循环

二、property和synthesize关键字

1> @property

  1. 作用

    ① 自动生成某个成员变量的set方法和get方法
  2. 使用注意

    ① 只能出现在@interface中② 可以使用逗号运算符为多个同类型的成员变量生成setter和getter③ 为了与点语法匹配,使用@property的成员变量不要以下划线开头④ @property可以同时完成@synthesize的任务⑤ @property默认生成的成员变量是@private类型的以下划线开头

2> @synthesize

  1. 作用

    ① 自动生成某成员变量的setter和getter的实现② 可以指定要访问的成员变量的名字,通常是以下划线开头
  2. 使用注意

    ① 只能出现在@implimentation中② 可以使用都好运算符同时生成多个setter和getter的实现③ 若未指定要访问的成员变量,默认会访问生成@synthesize后名字一  样的成员变量④ 若访问的成员变量未找到,将会自动生成@private类型的以下划线  开头(或与@synthesize后名字一样的)的成员变量

三、id类型

1> 基本含义

  • 万能指针,可以指向任何OC对象
  • 可以理解为NSObject *

2> 使用注意

  • id在定义变量时不要加上符号*,其本身已经包含

四、构造方法

1> 作用

  • 用来初始化对象,返回一个初始化好的对象

2> 关于+new方法

  1. +new等价于+alloc方法和-init方法
  2. +alloc方法和-init方法

    ① +alloc方法    1)返回值为id类型    2)为对象分配内存空间,并返回该对象② -init方法    1)返回值为id类型    2)初始化当前对象,并返回初始化好的对象

3> 重写-init方法的步骤

  1. 调用super的-init方法

    ① 初始化父类中的成员变量和其他属性② 返回当前对象,并赋值给self③ 根类将isa指针初始化为最初调用init方法的类
  2. 进行子类成员变量的初始化
  3. 返回初始化完毕的对象

4> 自定义-init方法

  1. 适用场合

    ① 当初始化成员变量时,需要将成员变量初始化不同的值,通常需要自定义-init方法,将指定的值作为-init方法的参数
  2. 规范

    ① 一定是对象方法,以-开头② 返回值一定是id类型③ 方法名一定以init开头

五、分类(category)

1> 作用

  • 在不改变原来类的基础上为类扩充一些方法
  • 通常作用与大型的类,将类的不同类型的方法,写在不同的分类中

2> 定义

  • 分类的定义与类的定义相似,在类名后面用小括号指明分类的名字
  • 分类通常以模块命名

3> 使用注意

  • 分类只能为类扩充方法,不能扩充成员变量
  • 分类方法的实现中可以访问原来类中的成员变量
  • 在分类中实现原来类的方法,会造成原来类中方法的实现失效
  • 调用方法时,优先在分类中查找,然后在原来类中查找,最后才在父类中查找
  • 在原来类的多个分类查找方法时,优先在最后编译的分类中查找

六、NSString类

1> NSString *与char *

  1. NSString *

    ① NSString \*指向OC字符串对象的指针② NSString是OC字符串类封装了字符串相关操作的方法
  2. char *

    ① char \*创建的是指向C语言字符或字符串的指针② char \*只能存储字符指针或字符串指针,没有相关操作

2> NSString与NSMutableString

  • NSString创建的字符串对象是不可改变的,NSMutableString创建的字符串对象是可改变的

3> NSString的方法

  1. NSString的子类必须实现的两个方法

    ① -length 对象方法,获取字符串的长度② -characterAtIndex: 对象方法,获取字符串指定索引位置的字符
  2. 初始化方法

    ① +(NSString*)stringWithString: 类方法,创建一个字符串常量,在  Xcode6.0中已经没有该方法,用字符串常量直接创建② +(NSString*)stringWithFormat: 类方法,合成一个新的字符串③ -(NSString*)initWithString: 对象方法,在字符串对象初始化时,为其赋值一个字符串常量④ -(NSString*)initWithFormat: 对象方法,在字符串对象初始化时,为其赋值一个新合成的字符串
  3. 读取文件中字符串的方法

    +(NSString*)stringWithContentsOfFile: encoding: error: 类方法
  4. 获取网络中字符串的方法

    +(NSString*)stringWithContentsOfURL: encoding: error: 类方法
  5. 字符串操作的方法

    ① 获取字符串指定范围的子串    -(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

  1. +description方法

    ① 类方法,默认输出格式为:类名② 返回值为NSString *类型
  2. -description方法

    ① 对象方法,默认输出格式为
    <类名:内存地址>
    ② 返回值为NSString *类型③ 不要在-description方法中用NSLog函数一%@格式输出self

八、SEL类型

1> 基本使用

  1. 含义

    ① SEL本质上是一个指针类型的数据② 保存的是方法的地址
  2. 作用

    ① 将方法包装成SEL类型的数据② 每个对应一个唯一的SEL类型数据③ 通过SEL类型的数据可以间接调用类/对象方法

2> 通过SEL类型间接调用方法的方式

  1. 通过方法名间接调用

    ① @selector(方法名),返回一个与参数对应的SEL类型的数据② performSelector:(SEL),通过SEL类型的数据间接的调用类/对象方  法③ performSelector:(SEL) WithObject:(id),通过SEL类型数据调用含  参数的类/对象方法
  2. 通过字符串形式的方法名间接调用

    ① 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 
/*****定义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;}

转载于:https://www.cnblogs.com/theDesertIslandOutOfTheWorld/p/4726978.html

你可能感兴趣的文章
读写分离
查看>>
android中利用Socket实现手机客户端与PC端进行通信
查看>>
Haskell版的Quine
查看>>
SUID、SGID、Sticky BIT
查看>>
SSH案例--入门级
查看>>
QT学习-核心类列表-24、QtQml
查看>>
javascript&jquery 判断滚动到页面底部
查看>>
织梦5.7&nbsp;文章不能上传图片的解决方…
查看>>
contos6.5 LNMP安装记录
查看>>
8.2 bootstrap 下载和基本使用
查看>>
Cluster群集三类:NLB,CLB,MSCS
查看>>
文件操作
查看>>
C/S模式下session通讯问题,或使用token的原因
查看>>
FMDB-一个sqlite的封装
查看>>
RowState和DataRowVersion使用示例
查看>>
Maven依赖范围
查看>>
div+css命名规则
查看>>
Linux系统下安装BeautifulSoup
查看>>
c# .net使用SqlDataReader注意的几点----转
查看>>
hsql数据库使用详解(入门)及快速使用
查看>>