一、点语法

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方法
    )返回值为id类型
    )为对象分配内存空间,并返回该对象
    ② -init方法
    )返回值为id类型
    )初始化当前对象,并返回初始化好的对象

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> 基本使用

  • ,会调用相应的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 <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 ;
}

OC - 4.OC核心语法的更多相关文章

  1. oc总结 --oc基础语法相关知识

    m是OC源文件扩展名,入口点也是main函数,第一个OC程序: #import <Foundation/Foundation.h> int main(int argc, const cha ...

  2. 【iOS系列】-oc中特有的语法

    [iOS系列]-oc中特有的语法 oc数据类型: 1,基本类型 2,对象类型 3,id 4,BOOL 5,block 6,SEL 1:category 使用继承关系来扩充一个类,有一个弊病,高耦合性 ...

  3. OC - 3.OC的三大特性

    一.封装 1> 封装的定义 隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别 2> 封装的好处 可以通过set方法防止为成员变量设置不合理的值 仅向外部提供公 ...

  4. 第二章 JavaScript核心语法

    第二章   avaScript核心语法 一.变量的声明和赋值 JavaScript是一种弱类型语言,没有明确的数据类型,也就是在声明变量时不需要指定数据类型,变量的类型由赋给变量的值决定. 在Java ...

  5. css基本概念与css核心语法介绍

    css基本概念 css是什么?不需要了解太多文字类介绍,记住css是层叠样式表,HTML是页面结构,css负责页面样式,javascrt负责静态页面的交互.CSS 能够对网页中元素位置的排版进行像素级 ...

  6. 黑马程序员——OC语言 核心语法(2)

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)id 1)简介:万能指针,能指向任何OC对象,相当于NSObject ...

  7. OC语言-04-OC语言-核心语法

    一.点语法 1> 基本使用 点语法本质上是set方法/get方法的调用 2> 使用注意 若出现在赋值操作符的右边,在执行时会转换成get方法 若出现在赋值操作符的左边,在执行时会转换成se ...

  8. 黑马程序员——OC语言 核心语法(1)

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)点语法 点语法其实本质上还是方法调用 当使用点语法时,编译器会自动展 ...

  9. 黑马程序员——OC语言 核心语法 (3)

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)分类Category 1) 基本用途 如何在不改变原来类模型的前提下 ...

随机推荐

  1. plsql的参数IN和OUT

    代码片段一 create or replace procedure scott.pro_para_inout(p_dname in out scott.dept.dname%TYPE, p_loc o ...

  2. 动态代理入门(jdk)

    动态代理就是aop的核心,动态代理简单的就是通过创建一个代理对象,然后把原来的方法增强.很抽象,例子是王道.jdk中提供了动态代理的实现,但是它是针对接口,如果要实现动态代理,需要被代理对象的接口.这 ...

  3. shell常识总结

    #!/bin/bash cmd="ls -lt | grep ^d | awk 'NR==1 {print $9}'" $cmd 这是一个获取文件夹名字的脚本,但是却提示: ls: ...

  4. Spark0.8.0的安装配置

    1.profile export SCALA_HOME=/home/hadoop/scala-2.9.3SPARK_080=/home/hadoop/spark-0.8.0export SPARK_H ...

  5. HDU3695 - Computer Virus on Planet Pandora(AC自动机)

    题目大意 给定一个文本串T,然后给定n个模式串,问有多少个模式串在文本串中出现,正反都可以 题解 建立好自动机后.把文本串T正反各匹配一次,刚开始一直TLE...后面找到原因是重复的子串很多以及有模式 ...

  6. MyBatis Oracle批量更新

    <update id="updateProductSerialNo" parameterType="java.util.List"> <for ...

  7. 掌握jQuery插件开发

    进行jQuery插件开发前,首先要知道两个问题:什么是jQuery插件?jQuery插件如何使用? 第一个问题,jQuery插件就是用来扩展jQuery原型对象的一个方法,简单来说就是jQuery插件 ...

  8. 引入less报错解决方法以及浏览器设计不同的地方

    XMLHttpRequest cannot load file:///C:/Users/PAXST/Desktop/805/first.less. Cross origin requests are ...

  9. 线段树练习[单点更新] HDU 2795 Billboard

    题目大意:有一个h*w的公告榜,可以依次在上面添加信息.每个信息的长度为x,高为1. 优先在最上面加入,如果空间足够的话,然后优先放在最左面.统计每条公告最终的位置,即它所在的行数. 这里是线段树来存 ...

  10. 实现app上对csdn的文章查看,以及文章中图片的保存 (制作csdn app 完结篇)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24022165 今天给大家带来CSDN的完结篇,即增加文章的查看和文章中图片的保存 ...