OC:基础学习
OC面向对象的编程语言思想
类与对象、继承与实例化、属性点语法、内存管理、字符串、可见度。
类是一组具有相同特征和行为的事物的抽象
OC的与C相比所具有的新的特点:
定义新的类、类的实例和方法、方法的调用(称为发消息)、属性声明(以及通过他们自动合成存取方法)、静态和动态类型化、块(block)已封装的,可在任何时候执行的多段代码、基本语言的扩展,协议和类别
静态、动态方法的区别
静态方法也就是说是类的方法,不用生成对像也可以调用的,用static修饰,通过类名.方法来调用,动态方法应该是对象的方法,必须通过具体的对像来调用,可以是new生成的,也可以是工厂类生成的。
OC中的表示形式:
动态方法用 - 修饰
静态方法用 + 修饰
静态方法与动态方法 参考
description() 方法的调用,重写
一般情况下,静态方法返回的对象,都不用手动释放。
什么是 Category
Category有很多种翻译: 分类 \ 类别 \ 类目 (一般叫分类)
Category是OC特有的语法, 其他语言没有的语法(类似于C#语言中的”扩展方法”和”partial”关键字)
Category的作用
可以在不修改原来类的基础上, 为这个类扩充一些方法.
把一个类的内容分在多个不同的文件中存储
便于团队协作开发
书写格式
声明
@interface 类名 (分类名称)
@end
实现
@implementation 类名 (分类名称)
@end
分类只能增加方法, 不能增加成员变量、@property(可能编译不报错,但是运行有问题)
分类可以访问原来类中的成员变量
如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略
方法调用的优先级(从高到低)
分类(最后参与编译的分类优先),只要有分类就优先调用分类,不考虑与主类的编译顺序。
原来类
父类
价值所在
实现了类的相关方法的模块化
把不同的方法分配到了不同的分类文件中
可以用一个分类来代表一类功能(一个模块)
支持团队协作
可以让团队内部的不同成员 共同扩充某个类的功能
可以为系统自带的类扩充功能
为每个对象扩展一个show方法
为字符串扩展一个计算字符串中得阿拉伯数字的个数的方法
什么是类扩展
可以为某个类扩充一些私有的成员变量和方法
写在.m文件中
英文名是Class Extension
书写格式
@interface 类名 ()
@end
对比分类, 就少了一个分类名称, 因此也有人称它为”匿名分类”
block
OC中的block(代码块),非常类似于C#语言中的委托。
语法介绍:
如何声明block
无参数、无返回值
带一个参数、无返回值
带两个参数、一个返回值
Block的组成要素跟函数类似
返回值
形式参数
实际参数
Block的定义格式
返回值类型 (^block变量名)(形参列表) = ^(形参列表) {
};
没有参数可以写void,比如:int (^blockname)(void);
调用Block保存的代码
block变量名(实参);
使用typedef定义Block类型。定义好以后就可以像普通数据类型那样使用了:
typedef 返回值类型 (^block类型名称)(形参列表);
OC:基础学习的更多相关文章
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- 【OC基础语法考试】
OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...
- [iOS]关于零基础学习iOS开发的学习方法总结
关于零基础学习iOS开发的学习方法总结 最近很多零基础来参加蓝鸥培训的学生经常会问到一些学习方法的问题,就如下我自己见过的好的学习方法一起讨论一下. 蓝鸥iOS开发技术的学习路线图 程序员的主要工作是 ...
- Swift基础学习
Swift基础学习 http://c.biancheng.net/cpp/html/2242.html 这个网站最近看了一下,对于基本语法解释概括的相对全面,如同重新练习一遍OC似的,挺全面的,谢谢 ...
- OC基础回想(十二)协议
在OC基础(十一)中我们讨论了类别和非正式协议的奇异之处.在使用非正式协议时.能够仅仅实现你想要获得响应的方法.也不必在对象中声明不论什么内容来表示该对象可用作托付对象. 全部这些任务能够用最少的代码 ...
- D03-R语言基础学习
R语言基础学习——D03 20190423内容纲要: 1.导入数据 (1)从键盘输入 (2)从文本文件导入 (3)从excel文件导入 2.用户自定义函数 3.R访问MySQL数据库 (1)安装R ...
- java基础学习笔记五(抽象类)
java基础学习总结——抽象类 抽象类介绍
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
随机推荐
- (六)6.16 Neurons Networks linear decoders and its implements
Sparse AutoEncoder是一个三层结构的网络,分别为输入输出与隐层,前边自编码器的描述可知,神经网络中的神经元都采用相同的激励函数,Linear Decoders 修改了自编码器的定义,对 ...
- fzu 2128 AC自动机
链接 http://acm.fzu.edu.cn/problem.php?pid=2128 解题方法 首先考虑暴力,,就是拿每一个字符串在匹配串里面找到所有位置,然后从头到尾不断更新最长的合理位 ...
- switchover步骤切换
主库 alter system switch logfile; alter system set log_archive_dest_state_2='defer'; select switchover ...
- 【转】使用Xcode和Instruments调试解决iOS内存泄露
原文网址:http://blog.csdn.net/totogo2010/article/details/8233565 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄 ...
- JBPM4之decision节点:3、程序猿|菜鸟|攻城狮|牛人
JBPM入门系列文章: JBPM4入门——1.jbpm简要介绍 JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件 JBPM4入门——3.JBPM4开发环境的搭建 JBPM4入门—— ...
- Arduino "Card failed, or not present"(即找不到SD卡)错误解决方案
http://forum.arduino.cc/index.php?topic=28763.0 Arduino SD自带的例程都是有一个BUG的,必须在pinMode后面加上如下的第二行代码 pinM ...
- linux下mysql操作的命令
最近在学习mysql,还是只菜鸟,找到下面篇文章对初学者挺有用的,所以共享下 1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql star ...
- JavaScript定时器与执行机制解析
从JS执行机制说起 浏览器(或者说JS引擎)执行JS的机制是基于事件循环. 由于JS是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任务必须等到前一个任务结束才能开始执行. 为了避免因为 ...
- 页面性能测试&提升方式
性能测试包括:web系统页面测试.web系统后台测试 2种方式来提升你的web 应用程序的速度: ● 减少请求和响应的往返次数 ● 减少请求和响应的往返字节大小. 详细的看此文http://www.5 ...
- IA32系统级架构总览(一) 实模式和保护模式
应用程序的编写大部分的时候是不必关心系统级架构的,最多学习一下平台所给的API即可,也就是我们通常说的黑箱子.但是在学习操作系统的时候,系统级架构是要关心的. 系统级架构很难学习,其中一个很大的原因是 ...