OC简单介绍
一.OC与C的对比
- 关键字
- OC新增的关键字在使用时,注意部分关键字以"@"开头
- 方法->函数
- 定义与实现
- 数据类型
- 新增:BOOL/NSObject/id/SEL/block
- 流程控制语句
- for (NSString * name in NSArray){NSLog(@”%@”, name);}
- 新增特性
- 封装性
- 继承性
- 多态性
- 新增语法
- 属性生成器
- @property声明属性
- @synthesize合成属性
- 分类: 扩展类,无需子类化
- 协议: 声明方法
- 属性生成器
- Fundation框架/Foundation.h是主头文件
- 新增异常处理
- @try … @catch … @finally
二.OC程序
- OC可以兼容C
- import 与 include
- import会自动重复拷贝
- printf 与 NSLog
- NSLog会自动换行
- NSLog在输出时会附加一些系统信息
- 他们接收的参数不一样
- NSLog打印字符串时在""前加@
三.面向对象的思想
- 面向过程强调的是功能行为,关注的是解决问题需要哪些步骤(需要亲力亲为)
- 面向对象强调的是具备功能的对象,关注的是解决问题需要哪些对象(不需要亲力亲为),执行者转换成指挥者
四.类与对象
- 类(名词提炼发)的设计: 描述属性(成员变量)和行为(成员方法)
- 类的声明:
@interface 类名 : 父类名(NSObject)
{
定义实例变量(成员变量/属性);
} //行为声明 @end
- 声明的目的: 告诉系统,这个类有哪些属性和行为
- 注意
- 类的名称首字母必须大写
- OC类声明中属性只能写在@interface和@end之间的{}中
- 编写OC属性时,建议将所有的属性名称前加下划线_
- 定义行为时的注意点:
- 谁最清楚这个行为,这个行为就属于谁
- 类的实现:
@implementation 类名(必须和声明时的类名一模一样) //行为实现 @end;
- 创建对象
类名 *对象名称 = [类名 new];
- 调用new方法就可以创建对象
- 要具备new方法à要在类名:后面加上NSObject
- 发送消息(调用方法)
[类名/对象名称 方法名称];
- 调用new系统内部进行的行为
- 为类创建出来的对象在堆中分配存储空间
- 初始化创建出来的对象中的属性
- 返回创建出来的对象对应的地址
- 如果使用一个指针保存了某个对象的地址,那么我们就称这个指针为某个类型的对象
- 每一个对象都有属于自己的属性,可以通过对象->对象成员的方式访问对象中的成员,一个对象的成员进行修改跟另一个对象无关
五.类方法和对象方法
- 类方法
- 特征
- 以+开头
- 只能由类来调用
- 调用格式[类名 方法名称];
- 不能访问实例变量(成员变量),因为没有创建存储空间来存储类中的成员变量
- 类方法中不能直接调用对象方法,要想调用对象方法,必须创建或传入对象。
- 方法中可以直接调用类方法
- 好处
- 节省内存空间
- 不依赖对象,执行效率高
- 应用场景
- 当方法内部不需要使用成员变量时
- 一般用于编写工具方法
- 特征
字符串查找
文件操作
数据库操作
- 对象方法
- 特征
- 以-开头
- 只能让对象调用
- 调用格式[对象名称 方法名称];
- 能够访问实例变量(成员变量)
- 可以调用当前对象的对象方法,也可以调用同一类别的其他对象的对象方法(创建对象/用self)
- 方法中可以调用类方法
- 注意:
- 类方法与对象方法可以同名
- 特征
六.对象的存储细节
- 对象方法调用的过程
- 类创建的每一个对象都占据一定的堆存储空间,并且都有一份属于自己的成员变量,方法存储在堆中的类对象中,并且在整个内存中只有一份
- 创建对象的时候返回的地址是类的第0个属性,并不是定义的第1个属性,而是每个对象都有的isa指针.
- isa指针是对象中的隐藏指针,存储着堆中类对象的地址
- 通过isa指针可以在运行时知道当前对象属于哪个类
知识点总结
1.什么是面向对象?
+ 找对象使用对象的方法(功能)2.什么是对象?
+ 对客观事物的抽象3.什么是类?
+ 类就是用于描述对象的共性特征,是对对象的抽象
+ 主要用于描述对象的属性和行为4.如何定义一个类
+ 4.1类的声明
* 声明类的目的: 告诉系统我们这个类中有哪些属性和方法
* 类名: 首字母大写
* : NSObject 为了让我们的类具备创建对象的能力, 也就是可以使用new方法
@interface 类名 : NSObject
{
属性; // 属性必须写到{}中, 属性名称以_开头
}
方法; // 方法必须写到{}外面
@end
+ 4.2类的实现
@implementation 类名
方法的实现
@end5.如何创建对象
要想创建对象必须给类发送一个new消息, 调用类的new方法
>开辟存储空间
>初始化属性
>返回地址
类名 *p = [类名 new];
+ 5.1如何发送消息? [类名/对象名称 方法名称]6.修改对象的属性和获取对象的属性
+ 因为类的本质是一个结构体, 所以我们是用一个指向结构体的指针保存了对象的地址, 所以我们可以通过指针操作结构体的方式来操作对象
+ p->属性名称 = 值; // 对象的属性默认是受保护的, 必须把属性变为公开的才可以直接访问@public
+ NSLog(@"age = %i", p->age);7.类中可以定义两种方法
+ 7.1对象方法
* 以-开头
* 可以直接访问对象的属性
* 必须使用对象调用
* 对象方法中可以直接调用其它对象方法
* 对象方法中可以直接调用类方法
+ 7.2类方法
* 以+开头
* 不可以直接访问对象的属性
* 必须使用类调用
* 类方法中不可以直接调用对象方法
* 类方法中可以直接调用类方法
+ 7.3方法定义的注意点
* 方法名采用 驼峰命名
* 方法中的数据类型都必须使用()括起来
* 方法中每个参数的数据类型前面都必须加上:
* :也是方法名的一部分- 8.C与OC字符串的区别
+ C中的字符串不是对象,而OC里是对象,因此,具备了很多功能
- 如何计算字符串的长度
+ C中
* size_t size = sizeof(name);//包含\0
* size_t length = strlen(name);//不包含\0
+ OC中
* >* NSString *str = @"贺梦洁";
>* NSUInteger len = [str length];
>* NSLog(@"len = %lu", len);//计算出的是个数,而不是占用的字数
- NSString *str = [NSString stringWithFormat:@"age = %i, height = %f\n", 30, 1.75];//调用类方法,字符串格式化 注意:
输出C语言的字符串用%s,OC中用%@,%@专门用于输出对象类型
OC简单介绍的更多相关文章
- iOS开发——UI精选OC篇&UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍
UIApplication,UIWindow,UIViewController,UIView(layer)简单介绍 一:UIApplication:单例(关于单例后面的文章中会详细介绍,你现在只要知道 ...
- iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备
XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...
- CocoaPods常用终端命令及Profile文件简单介绍
Pod常用终端命令 pod init 创建pod文件 pod install 开始安装第三方框架,如果网上有更新,会安装最新的 pod install --verbose--no-repo-updat ...
- iOS开发UI篇—UITableview控件简单介绍
iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...
- iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
- oc-12-NSString 类简单介绍及用法
// 11-[掌握]NSString 类简单介绍及用法 #import <Foundation/Foundation.h> int main(int argc, const char * ...
- SQLite简单介绍
一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyed ...
- FMDB(一)— 简单介绍
在iOS开发过程中常常会用到数据库方面的操作,但是iOS原生的SQLite API使用起来并不十分友好,对于C语言基础较薄弱的朋友来说.使用起来可能会认为比較不便.于是,一些第三方的对SQLite A ...
- Linux守护进程简单介绍和实例具体解释
Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...
随机推荐
- spark structured-streaming 最全的使用总结
一.spark structured-streaming 介绍 我们都知道spark streaming 在v2.4.5 之后 就进入了维护阶段,不再有新的大版本出现,而且 spark strea ...
- GoLang设计模式12 - 空对象模式
空对象设计模式是一种行为型设计模式,主要用于应对空对象的检查.使用这种设计模式可以避免对空对象进行检查.也就是说,在这种模式下,使用空对象不会造成异常. 空对象模式的组件包括: Entity:接口,定 ...
- kafaka高效吞吐量-生产端,服务端,消费端
零拷贝:sendfile 生产端 生产端:消息压缩,缓存批量发送,异步解耦 多线程并发:防止某一个业务阻塞等待 接收消息缓存 BufferPool设计:不释放 服务端 Reactor模型,顺序写,页缓 ...
- K8S 部署 SpringBoot 项目(一篇够用)
现在比较多的互联网公司都在尝试将微服务迁到云上,这样的能够通过一些成熟的云容器管理平台更为方便地管理微服务集群,从而提高微服务的稳定性,同时也能较好地提升团队开发效率. 但是迁云存在一定的技术难点,今 ...
- 菜鸡的Java笔记 第十八 - java 代码块
代码块 code block content (内容) 在程序结构之中使用"{}"定义的内容就称为代码块,但是会根据其声明的位置以及关 ...
- [uoj173]鏖战表达式
2018年论文题,上接loj2506,主要是论文中的第4章,也可快速跳至原题解 5.平衡树的嵌套问题 平衡树嵌套 所谓平衡树嵌套,就是若干棵平衡树,其中若干棵平衡树的根会指向另一颗平衡树上的一个节点 ...
- [bzoj1081]超级格雷码
手动模拟一组样例,可以理解大致应该如何操作具体实现中,记录每一位当前应该+1还是-1,然后操作最低的位并将后面的+1和-1全部取反即可 1 #include<bits/stdc++.h> ...
- 拨开由问题《linux下malloc最大可申请的内存》带来的重重疑云
今天阅读相关书籍的时候看到 "进程中堆的最大申请数量" 这一问题,我们知道使用malloc分配内存是在堆Heap里面分配的,如果一台机器一共有8GB物理内存,空闲5GB,那么我们使 ...
- 『学了就忘』Linux用户管理 — 50、用户管理相关文件详细说明
目录 1.用户信息文件 2./etc/shadow影子文件 3./etc/group 组信息文件 4.组密码文件 5.用户的家目录 6.用户邮箱目录 7.用户模板目录 总结: 提示:严格的用户权限划分 ...
- 痞子衡嵌入式:深扒IAR启动函数流程之段初始化实现中可用的压缩选项
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR启动函数流程里段初始化实现中可用的压缩选项. 接着 <IAR启动函数流程之段初始化函数__iar_data_init3实现& ...