十.匿名对象


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

注意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. Visual studio debug—Process with an Id of 5616 is not running的解决方法

    今天调试的时候,碰到下面的问题 打开项目的csproj文件,拉到最下方找我我图中红框中的部分,删除它即可.

  2. How to Collect Bne Log Files for GL Integrators

    In this Document   Goal   Solution APPLIES TO: Oracle General Ledger - Version 11.0 and laterInforma ...

  3. C算法实现:将字符串中的数字返回为整型数

    今天看linux内核驱动的代码,发现一个算法写得挺简单,也有意思. 分享一下我的测试代码: #include <stdio.h> typedef int U32 ; U32 String2 ...

  4. ThinkPHP 初探

    准备 ThinkPHP下载 Eclipse-for-php 如何使用 放置位置 检验引用效果 效果 路由 调试之模板的使用 前提 生产模式 开发模式 添加完相应的路径以及模板文件后 总结 对国人开发的 ...

  5. OpenMP实现生产者消费者模型

    生产者消费者模型已经很古老了吧,最近写了个OpenMP版的此模型之实现,来分享下. 先说一下模型的大致做法是: 1.生产者需要取任务,生产产品. 2.消费者需要取产品,消费产品. 生产者在生产某个产品 ...

  6. SpriteKit物理引擎碰撞中5个重要信息

    我们知道在SpriteKit物理引擎实际是基于Box2D! 在SpriteKit中当你设置好适当的碰撞参数后,通过遵守SKPhysicsContactDelegate,你可以选择实现2各碰撞回调方法: ...

  7. SQLite 创建表(http://www.w3cschool.cc/sqlite/sqlite-create-table.html)

    SQLite 创建表 SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表.创建基本表,涉及到命名表.定义列及每一列的数据类型. 语法 CREATE TABLE 语句的基 ...

  8. EJB3基本概念、运行环境、下载安装与运行jboss

    EJB3基本概念 什么是EJB: EJB(EnterpriceJavaBeans)是一个用于分布式业务应用的标准服务端组件模型.采用EJB架构编写的应用是可伸的.事务性的.多用户安全的.采用EJB编写 ...

  9. activty栈管理

    题外话:我们有时在开发中,通常会有如下的需求:屏幕1-->屏幕2-->屏幕3-->屏幕4...,现在需要直接从屏幕4-->屏幕1,很多人会想到对activity进行管理得到对应 ...

  10. PAM30 模拟登陆 投票

    Python真的是让人爱不释手啊,一直以来都不知道如何自动投票,然而今天有幸看到了PAM30,下面谈一谈我一个小案例吧. 准备 PAM30下载地址 编码前注意 由于一开始没有什么概念,还以为是个第三方 ...