十.匿名对象


即不将对象赋给指针,而是直接使用

注意new对象的时候要用[ ]嵌套

例如:[[Car new] run];


十一.枚举书写规范


注意空格

//注视
typedef enum {


} XXX;

十二.面向对象三大特性之封装


封装、继承、多态

封装(成员变量的封装)
阻止用户随意访问和修改成员变量,将成员变量设为私有,用函数来作为修改和查看的入口。
规范:
set方法:对输入进行过滤,对对象内部的成员变量进行设置。
命名:set + 成员变量名称,且后者首字母大写,返回值一定要是void,形参不能跟成员变量名称一致,可以在前面+new.
如果成员变量使用下划线开头,则不必再加new
get方法:返回对象内部的成员变量。
命名:方法名同成员变量名一致,不需要接收任何参数。

对于只读的成员变量,只提供get方法

因为get方法常常和成员变量名相同,所以将成员变量以下划线开头,get方法不带下划线。

下划线开头的一定是成员变量。

#import <Foundation/Foundation.h>

@interface Student : NSObject {

int _age;

}

- (void)study;

- (void)setAge : (int)newAge;

- (int)age;

@end

@implementation Student

- (void)study{

NSLog(@"%d岁的学生在学习",_age);

}

- (void)setAge : (int)age{

){

age = ;

}

_age = age;

}

- (int)age{

return _age;

}

@end

int main(){

Student *stu = [Student new];

[stu setAge : -];

NSLog(@"学生现在%d岁",[stu
age]);

[stu study];

}

十三.弱语法


是用一个对象并不存在的方法,编译和链接均只是警告,而不是报错。

报错:

'NSInvalidArgumentException', reason: '-[Person test]: unrecognized selector sent to instance 0x7faf28c0cc50'

给对象Person发送了一个不能识别的消息test.

OC的方法是动态检测,在运行过程中才会检测对象有没有实现相应的方法。

声明(interface)是可以不写的,可以直接写实现并且继承NSObject(在main以前才可执行),但是实际中不这么写。

十四.类方法


与之对应的是对象方法。

类方法以+开头,由于不用创建对象,直接从类的存储空间执行,可以提升性能。

只能由类调用。允许类方法与对象方法同名,类方法内不能访问成员变量。

类方法的好处:不依赖于对象,执行效率高,能用类方法尽量用类方法。

要防止死循环(无限递归)。

十五.self关键字


self是一个指针,指向方法调用者。
如self->_age来访问成员变量。
或者[self <method>]在类内执行方法。

注意,在类方法内也可以使用self!!!,这时候self代表类。

注意事项:
也要防止死循环(无限递归)。注意分析self指向的是对象还是类。
谁调用了当前方法,self就指向谁 。

十六.面向对象三大特性之继承


被继承的类称为父类(super),继承别人的类称为子类。

使用 : 来继承,由于默认的访问参数为protected,因此可以被全部继承。

例如NSObject是根类,包含了创建对象等方法。

特殊:NSProxy不是继承自NSObject,它也是一个根类。

注意事项:
父类必须声明在子类之前。
不允许子类和父类具有想通名称的成员变量。
调用对象,优先去对象所在的类找,找不到再去父类找。(每个类内都有superclass指针,也有isa指针指向类的存储空间)

继承的缺点:耦合性太强。

区分组合和继承:
例如Student要有Score的属性,应该把Score作为Student的一个成员变量  xxx拥有xx。
如果Dog要有Animal的属性,应该让Dog继承Animal。 xxx是xx。

访问父类,使用super。既可以访问对象方法,也可以调用类方法。
super处于对象(类)方法中,就会调用父类的对象(类)方法。

常见场景:
常常是在子类重写的方法中再调用父类的方法。

十七.面向对象三大特性多态


多态:父类指针指向子类对象。

例如Dog类继承了Animal类
Animal *a = [Dog new];

假设Animal和Dog都有eat方法

[a eat];调用的是子类Dog的方法,会动态检测a指针指向的对象是什么类型,会调用真实类型的方法。

由于NSObject是根类,甚至可以使用NSObject *n = [Dog new];

多态的好处:
例如有feed方法用来喂动物,传入Animal指针,这样就可以处理各种继承子Animal的对象。
void feed(Animal *a){
[a eat];
}

多态的局限性:
父类类型的指针变量不能用来调用子类方法(可以调用成功,但是语法不规范),如果一定要调用,先进行类型转换。
    

十八.NSString


创建字符串:
NSString *str = @“string”;
输出字符串用%@:
NSLog(@“xxx%@“,str);

创建字符串的另一种方式
str = [NSString stringWithFormat : @“xxxxxx %d”, <var>];

OC语言(二)的更多相关文章

  1. iOS开发-OC语言 (二)类的设计

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...

  2. oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

    一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...

  3. swift调用oc语言文件,第三方库文件或者自己创建的oc文件——简书作者

    Swift是怎样调用OC的第三方库的呢?请看下面详情: 情况一: 1.首先打开Xcode,iOS->Application->Single View Application, 选Next. ...

  4. OC语言前期准备

    OC语言前期准备 一.OC简介 Oc语言在c语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,在OC代码中,可以混用c,甚至是c++代码. 可以使用OC开发mac osx平台和ios平台的应 ...

  5. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  6. OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  7. OC语言构造方法

    OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...

  8. OC语言类的本质和分类

    OC语言类的深入和分类 一.分类 (一)分类的基本知识  概念:Category  分类是OC特有的语言,依赖于类. 分类的作用:在不改变原来的类内容的基础上,为类增加一些方法. 添加一个分类: 文件 ...

  9. OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  10. OC语言BLOCK和协议

    OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似 ...

随机推荐

  1. arm-none-eabi-g++ -Xlinker -T "../LF3Kmonitor.ld" -Xlinker -Map="Bogota_ICT_V.map"-ram-hosted.ld -mc

    1.arm-none-eabi-g++:是编译ARM裸板用的编译器,不依赖于操作系统. 2.-Xlinker -T "../LF3Kmonitor.ld" -Xlinker -Ma ...

  2. Eclipse中配置javap命令

    Run→External Tools→External Tools Configurations-进入如下图二所示的Program配置界面.也可以通过如下图一所示的工具栏按钮进入Program配置界面 ...

  3. Tomcat中的ssl安全信道的实现

    为了实现https协议通信,tomcat需要利用JSSE把SSL/TLS协议集成到自身系统上,通过上一节我们知道不同的厂商可以实现自己的JSSE,而tomcat默认使用的是以前sun公司开发实现的包而 ...

  4. 适配器模式(adapter)

    适配器模式的定义: 将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能在一起的那些类可以一起工作. 主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式. ...

  5. HDFS的写数据过程分析

    HDFS的写数据过程分析 我们通过FileSystem类可以操控HDFS, 那我们就从这里开始分析写数据到HDFS的过程. 在我们向 HDFS 写文件的时候,调用的是 FileSystem.creat ...

  6. T-SQL动态查询(3)——静态SQL

    接上文:T-SQL动态查询(2)--关键字查询   本文讲述关于静态SQL的一些知识和基础技巧. 简介: 什么是静态SQL?静态SQL是和动态SQL相对而言的,其实我们没必要过于纠结精确定义,只要大概 ...

  7. Struts 2 之类型转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用d ...

  8. Dynamics CRM2013 流程拷贝

    在CRM中工作流是一个非常不错的功能,在实际业务场景中能满足各种业务需求.在我们设置一个工作流的时候,同一个实体一个逻辑功能可能需要多个工作流来实现,而多个工作流的不同之处可能只是启动时间或者是步骤中 ...

  9. CentOS一般用户和root用户之间的切换

    如果终端提示符显示为"$",表明该用户为普通用户.输入su,回车,然后输入root密码,即可切换到root用户.如果是root用户想切换回普通用户,输入"su 用户名&q ...

  10. Web开发学习之路--Eclipse+Tomcat+mysql之初体验

    学习了一段时间android,正好要用到android和服务器之间的交互,既然要学习android,那么就涉猎下服务器端的开发了,以前学过php,用thinkphp很快可以搭建起来,但是android ...