十.匿名对象


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

注意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. 排查Full GC

    我们的Java应用因频繁FULL GC导致性能降低很多,经过多人的定位也没有结论,于是我自主请命,经过一天的研究终于搞定了,现把经验与大家共享,相关的gc日志如下: 4.758: [Full GC [ ...

  2. Android给控件添加触摸回调

    Android给控件添加触摸回调 脑补一个场景,一个页面点击某个按钮会弹出PopupWindow,然后点击PopupWindow以外的任意位置关闭 效果图 实现方法 可以在布局的最外层容器监听触摸事件 ...

  3. Writing Sentences [1]

    1) try 'there will be' instead of 'then' In homogeneity MRF, if and , there will be even if . 2) in ...

  4. Objective-C's Init Method

    初始化器在其他面向对象的语言中(比如Java)指的是构造器. Objective-C同样拥有对象构造器在init形式的方法中.不管如何,在Objc中这些方法没有什么特殊的行为. 按照惯例,程序猿在in ...

  5. Android Multimedia框架总结(十二)CodeC部分之OMXCodec与OMX事件回调流程

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52629449 前言:上篇文中分析 ...

  6. Dynamics CRM 视图显示列的拷贝—view layout replicator

    在视图设置的时候很多人会遇到这样的问题,要设置多张视图,而这多张视图可能除了筛选条件不同外其他的均相同,手动去设置是件重复的令人非常头痛的事情,如果能够拷贝那就相当完美了. 本篇即介绍视图显示列的拷贝 ...

  7. storm如何部署拓扑

    storm集群搭建 比较简单,参考官方文档即可http://storm.apache.org/releases/1.0.2/Setting-up-a-Storm-cluster.html 启动Nimb ...

  8. 01_学习java WEB涉及到的相关技术

     http协议 Tomcat服务器 Servlet技术 JSP技术 HTML CSS Javascript JDBC技术 MySQL.Oracle SQL语言 JavaBean 常用开源组件 DO ...

  9. linu下C语言之BMP图片操作编程(中)

    http://blog.csdn.net/morixinguan/article/details/50719472 关于BMP图的介绍之前已经说过了,最近要用到,又要重新开始学习. 现在实现一个让bm ...

  10. 学习TensorFlow,浅析MNIST的python代码

    在github上,tensorflow的star是22798,caffe是10006,torch是4500,theano是3661.作为小码农的我,最近一直在学习tensorflow,主要使用pyth ...