一、点语法

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. SVM 支持向量机

          学习策略:间隔最大化(解凸二次规划的问题) 对于上图,如果采用感知机,可以找到无数条分界线区分正负类,SVM目的就是找到一个margin 最大的 classifier,因此这个分界线(超平 ...

  2. algorithm@ Matrix fast power

    一. 什么是快速幂: 快速幂顾名思义,就是快速算某个数的多少次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高.一般一个矩阵的n次方,我们会通过连乘n-1次来得到它的n次 ...

  3. 64位linux安装android sdk的问题

    截至到今天,似乎在64位机器下安装android sdk存在不能运行的问题,可以用以下方法解决: Android SDK requires: Fedora 17 64bit with 32bit An ...

  4. linux bin文件制作

    一 Linux安装文件 Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类, 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文 ...

  5. devexpress中gridcontrol头部添加垂直线(右边框)

    winform开发,用devexpress中的gridcontrol控件,头部默认是3D样式,当客户希望像内容一样扁平化显示且需要添加垂直线(右边框)时恶梦开始了..经过一阵摸索发现可以这样解决: 1 ...

  6. DoctorNote医生处方笔记开发记录

    1.开发背景 一个开诊所的中医朋友,希望我能给他开发一个记录病人姓名和处方的Android手机app,以便查询病人每次就诊信息,比如上一次的处方,以前他要找个病人上一次的就诊处方,几乎要翻遍一叠厚厚的 ...

  7. Delphi 根据快捷方式路径取源文件地址

    unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ...

  8. Android执行shell命令

    一.方法 /** * 执行一个shell命令,并返回字符串值 * * @param cmd * 命令名称&参数组成的数组(例如:{"/system/bin/cat", &q ...

  9. tomcat安全配置之证书密码加密存储

    最近项目组要完成一个新Web Servicer接口的开发,其中有项要求是支持外部客户程序以https方式访问这些SOAP接口.项目组当前基于tomcat6.0.29开发,axis版本为1.4.拿到这个 ...

  10. systemtap 列出所有linux 内核模块与相关函数0

    diskiohttp://blog.163.com/digoal%40126/blog/static/16387704020131015105532435/ [root@localhost linux ...