十.匿名对象


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

注意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. 【SSH系列】一步步深入springmvc+商品列表查询demo

    在前面的博文中,小编主要简单的介绍springmvc的体系结构.mvc模式的优缺点以及mvc框架,今天我们来继续学习springmvc的相关知识,在这篇博文中,小编讲解过springmvc的体系结构, ...

  2. Web自动化框架LazyUI使用手册(8)--excel数据驱动详解(ExcelDataProvider)

    概述 框架提供了excel数据驱动方式运行测试用例的工具,本文将针对数据驱动,进行详细演示. 详见类:lazy.test.ui.browser.ExcelDataProvider 被测对象: http ...

  3. app控件唯一相对Xpath自动生成(增强版uiautomatorviewer)

    作者:cryanimal QQ:164166060 工具由来 前面的一篇博文较详细地介绍了uiautomatorviewer:扫描和分析Android应用程序的UI控件的工具. 熟悉控件获取的同学都知 ...

  4. Spark技术内幕:Sort Based Shuffle实现解析

    在Spark 1.2.0中,Spark Core的一个重要的升级就是将默认的Hash Based Shuffle换成了Sort Based Shuffle,即spark.shuffle.manager ...

  5. Java线程状态

    线程跟人类一样拥有自己的生命周期,一条线程从创建到执行完毕的过程即是线程的生命周期,此过程可能在不同时刻处于不同的状态,线程状态正是这小节的主题,线程到底有多少种状态?不同状态之间是如何转化的? 对于 ...

  6. FFmpeg的HEVC解码器源代码简单分析:环路滤波(Loop Filter)

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...

  7. JAVA面向对象-----封装

    我们日常使用的电脑主机,把cpu.内存.主板等等都封装到机箱里面去.假如没有机箱的话的出现什么问题,主机.主板全部都散落在一处,然后开机没有开机按钮,那么需要我们直接操作接跳线才能把电脑开启.这样子的 ...

  8. Ejb远程调用-jboss服务器调用服务器-Bean调用Bean

    英文参考地址 https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+o ...

  9. 深入理解CoordinatorLayout.Behavior

    要研究的几个问题 一.Behavior是什么?为什么要用Behavior? 二.怎么使用Behavior? 三.从源码角度看为什么要这么使用Behavior? 一.Behavior是什么?为什么要用B ...

  10. 【java虚拟机序列】java中的垃圾回收与内存分配策略

    在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...