十.匿名对象


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

注意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. Docker学习笔记1:CentOS7 下安装Docker

    本文内容摘自官网:https://docs.docker.com/engine/installation/linux/centos/#/create-a-docker-group 注:本文是介绍Lin ...

  2. shiro自定义Realm

    1.1 自定义Realm 上边的程序使用的是shiro自带的IniRealm,IniRealm从ini配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义realm. ...

  3. Dynamics CRM2016 时间字段属性中的新增行为

    之前的博客中有特地介绍过CRM中的时间字段以及它在不同的应用场景中涉及的时制转换,而CRM2016又给时间字段添加了新的行为,具体见下属截图,简单介绍下每个图中对应的行为的意思,最后会做demo来具体 ...

  4. Intellij IDEA 插件开发之自建插件仓库

    Intellij IDEA 有一个自己的官方的插件仓库,但是当我们的开发的 Intellij IDEA 的插件不能够对外公开时,我们就需要搭建自己的 Intellij IDEA 的插件仓库.前不久我们 ...

  5. 剑指offer面试题4 替换空格(c)

  6. jQuery Ajax 使用 ($.ajax、$.post、$.get)

    项目中只要涉及到前后台的交互,数据状态之间的交互,ajax是必不可少的.一般项目中jquery方式的ajax用的还是比较多的.封装的比较好,用起来也顺手,兼容浏览器之间的差异. 操作的方式有三种: 1 ...

  7. React实现动画效果

    流畅.有意义的动画对于移动应用用户体验来说是非常必要的.和React Native的其他部分一样,动画API也还在积极开发中,不过我们已经可以联合使用两个互补的系统:用于全局的布局动画LayoutAn ...

  8. 安卓中的消息循环机制Handler及Looper详解

    我们知道安卓中的UI线程不是线程安全的,我们不能在UI线程中进行耗时操作,通常我们的做法是开启一个子线程在子线程中处理耗时操作,但是安卓规定不允许在子线程中进行UI的更新操作,通常我们会通过Handl ...

  9. iOS动画进阶 - 教你写 Slack 的 Loading 动画

    (转载自:http://blog.csdn.net/wang631106979/article/details/52473985) 如果移动端访问不佳,可以访问我的个人博客 前几天看了一篇关于动画的博 ...

  10. 【一天一道LeetCode】#371. Sum of Two Integers

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Calcula ...