OC语言-02-OC语言-基础知识
一、基础语法
1> OC语言和C语言
- C语言是面向过程的语言,OC语言是面向对象的语言
- OC语言继承了C语言,并增加了面向对象的思想
- 以下内容只介绍OC语言与C语言的不同之处
2> 关键字
- OC语言的关键字大部分以@开头,也有小部分一字母或下划线开头
3> 字符串
- OC语言有自己特有的字符串,以@开头,区别于C语言字符串
4> BOOl类型
- 只有YES和NO两种取值
- 本质上是char类型,但理解为整型
- BOOL类型是由 条件编译机制引进的
5> #import与#include
- 都是将文件内容拷贝到指令出现的代码行
- 系统文件用尖括号,用户自定义的文件用圆括号
- #import包含的文件中有条件编译指令,可以防止文件被多次拷贝
6> NSLog与printf
NSLog
① NSLog函数包含在Foundation框架中
② NSLog函数接收的是OC语言字符串
③ NSLog函数默认在结束处输出换行
④ NSLog函数不能以%s格式输出包含中文的字符串
printf
① printf函数包含在stdio.h文件中
② printf函数接收的是C语言字符串
③ printf函数需要使用换行符'\n'
NSLog的其他用途
① 通过_LINE_参数输出改代码所在的行号
② 通过_FILE_参数输出改代码所在的文件的文件名
③ 通过_func_参数输出代码所在的函数的函数名
二、类、对象和方法
1> 类
类与结构体
① 结构体是数据的封装
② 类是数据及与数据相关操作的封装
类的声明
① 用@interface和@end组合来声明一个类,通常继承与根类NSObject
② 指定类名:首字母大写,使用驼峰标示,不包含数字
③ 声明属性列表:以下划线开头,可以与get方法的名称区分开
④ 声明方法列表:包括类方法和对象方法
类的实现
① 用@implementation和@end组合来实现类
② 实现类声明中的方法列表
③ 类的实现也可以定义实例变量,通常不这样定义
④ 实现未声明的类会发出警告
类的本质
① 类本质上也是一个对象,是class类定义的对象,称为类对象
② 使用class方法可以获取类对象
③ 每个类中都会有一个superclass指针指向其父类
类的加载和初始化
① 加载
1)类在使用之前会被加载至内存,加载完毕调用+(void)load方法
2)所有的类只会被加载一次
3)方法会在类加载的同时被加载
4)某个类定义的所有对象的isa指针都指向内存中该类的唯一副本
5)首先加载父类,其次是子类,最后是分类
② 初始化
1)类在使用时才会调用initialize方法初始化
2)没有使用的类不会调用initialize方法
3)首先调用父类的初始化方法,其次是子类
类的使用注意
① 类的声明和实现必须成对出现
② 类不能嵌套声明和实现
③ 成员变量不能在定义的时候初始化,也不能直接使用
④ 成员变量不能用static等关键字修饰
⑤ 访问没有的成员变量会报错
⑥ 成员变量必须写在大括号内,方法列表不能写在大括号内
⑦ 类的声明必须出现在使用之前
@public、@protected、@private与@package
① @public修饰的成员变量在任何地方都可以直接访问
② @protected修饰的成员变量可以在当前类以及子类的对象方法中直
接访问,默认为该类型
③ @private修饰的成员变量只能在当前类的对象方法中直接访问,在
实现中声明的成员变量默认为该类型
④ @package修饰的成员变量在同一个“体系内”(框架)可以访问,
介于@private和@public之间
2> 对象
对象与类
① 类是具有相同或相似属性和操作的对象的抽象;对象是类的一个实例,
是类通过调用一定的方法创建的
② 类本身会占用内存空间,包含所有的方法列表
③ 类的成员变量不会占用内存空间,只有在定义对象时才会分配存储空
间
对象的本质
① 本质上,我们研究的一切事物皆是的对象,包括具体事物和抽象事物
② 每个对象总会携带它的isa成员,指向该对象的类
③ 系统总会携带对象的相关信息
对象的创建和初始化
① 初始化方法通常用init开头
② 类方法alloc和init完成对象的创建和初始化
③ 类方法new可以代替alloc和init完成对象的创建并初始化
④ 在对象的初始化时会加载一次类,返回一个该类型的指针
匿名对象
① 每次创建的匿名对象都是不同的对象
② 匿名对象会造成内存泄露,尽量不要创建类似匿名对象的对象
3> 方法
方法的定义
① 返回值类型:指定函数返回值的类型
② 参数列表:多个参数用冒号及冒号前的描述隔开
③ 方法名:在有参数列表的方法中,方法名包括冒号及冒号前的描述
类方法
① 以加号(+)开头
② 只能通过类名调用,可以在中括号内调用
③ 不能访问实例变量
④ 当不需要访问成员变量的时候通常使用类方法
⑤ 工具类的方法通常为类方法
对象方法
① 以减号(-)开头
② 只能通过对象调用,可以在中括号内调用
③ 对象方法能访问实例变量
方法的使用注意
① 方法不能独立与类而存在
② 方法有声明就必须有实现,否则会报错
③ 方法只有实现,没有实现,仍然能够调用,但是会发出警告
④ 访问没有的方法会警告
⑤ 类方法可以和对象方法同名
⑥ 方法不能用static等关键字修饰
⑦ 带参数的方法,一个参数对应一个冒号,通常在每个冒号前写描述
方法与函数的区别
① 函数的定义可以出现在文件的任意位置,方法只能出现在
@implementation和@end之间
② 函数归文件所有,方法归类/对象所有
③ 方法通过类/对象调用,函数不依赖于类/对象
④ 方法可以访问成员变量,函数不可以
三、示例
```
/*
1.定义一个Dog类,具有属性:毛色、体重;方法:吃、跑、比较两条狗的体重
2.定义一个Person类,具有属性:dog;方法:遛狗,喂狗、与邻居比较狗的体重
*/
//Foundation框架中包含NSLog函数、NSObject类等得定义
#import <Foundation/Foundation.h>
//定义一个枚举来表示三种颜色:红绿蓝
typedef enum
{
ColorRed, //红色
ColorGreen, //绿色
ColorBlue //蓝色
} Color;
//定义一个Dog类,具有属性:毛色、体重;方法:吃、跑、比较两条狗的体重
@interface Dog : NSObject
{
//Dog的属性列表
@public //声明公共成员变量
int _weight; //体重
Color _color; //毛色
}
//Dog方法列表
//eat方法
- (void)eat;
//run方法
- (void)run;
//与另一条狗比较体重
- (int)compareTheWeihtWithOtherDog:(Dog *)dog;
@end
@implementation Dog
- (void)eat
{
//Dog每吃一次,体重增加一公斤
_weight++;
}
- (void)run
{
//Dog每跑一次,体重减少一公斤
_weight--;
}
- (int)compareTheWeihtWithOtherDog:(Dog *)dog
{
//使用三目运算符
return _weight > dog->_weight? _weight:dog->_weight;
}
@end
//定义一个Person类,具有属性:dog;方法:遛狗,喂狗、与邻居比较狗的体重
//Dog类的声明
@interface Person : NSObject
{
//Person属性列表
@public //声明公共成员变量
Dog *_dog; //狗
}
//Person方法列表
//遛狗方法
- (void)liuGou;
//喂狗方法
- (void)weiGou;
//与邻居家的狗比较体重
- (void)compareTheWeihtWithOtherPerson:(Person *)Person;
@end
//Person类的实现
@implementation Person
- (void)liuGou
{
//调用Dog的run方法
[_dog run];
}
- (void)weiGou
{
//调用Dog的eat方法
[_dog eat];
}
- (void)compareTheWeihtWithOtherPerson:(Person *)Person
{
int result;
//调用狗的比较体重方法
result = [_dog compareTheWeihtWithOtherDog:Person->_dog];
NSLog(@"较重的狗的体重为%d", result);
}
@end
int main()
{
//创建两条狗
Dog *d = [[Dog alloc] init];
Dog *d2 = [[Dog alloc] init];
//创建两个人
Person *p = [Person new];
Person *p2 = [Person new];
//为第1条狗的成员变量赋值
d->_color = 0;
d->_weight = 10;
//为第2条狗的成员变量赋值
d->_color = 1;
d->_weight = 20;
//为两个人的够对象赋值
p->_dog = d;
p2->_dog = d2;
//比较这两个人得狗,输出较重狗的体重
[p compareTheWeihtWithOtherPerson:p2];
return 0;
}
```
OC语言-02-OC语言-基础知识的更多相关文章
- R语言学习笔记:基础知识
1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...
- Go语言:包管理基础知识
起因是,遇到一个问题: 经查阅资料,很可能跟包管理有关,之前有了解过忘了就再学一遍顺便解决问题. 学习资料: GO111MODULE 是个啥? - 知乎 (zhihu.com) go mod使用 - ...
- 吴裕雄--天生自然 R语言开发学习:基础知识
1.基础数据结构 1.1 向量 # 创建向量a a <- c(1,2,3) print(a) 1.2 矩阵 #创建矩阵 mymat <- matrix(c(1:10), nrow=2, n ...
- C语言中 指针的基础知识总结, 指针数组的理解
1: 指针变量所占的字节数与操作系统为位数有关,64位操作系统下,占8个字节,32位操作系统下,占4个字节 2: 指针变量的本质是用来放地址,而一般的变量是放数值的3: 脱衣服法则: a[2] 变成 ...
- 02)php基础知识
综述 学习网址 菜鸟教程-PHP 所有学习内容皆来自以上网站. 基础 语法 PHP 脚本以 结束; PHP 文件的默认文件扩展名是 ".php". <?php echo &q ...
- CSS基础知识筑基
01.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),对HTML网页内容进行统一外观样式设计和管理,给网页进行各种装饰,让她变得美观,是HTML的化妆师.(Cas ...
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- 李洪强iOS开发之OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- iOS开发系列--C语言之基础知识
概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...
随机推荐
- WEB 安全之 SQL注入 < 三 > 提权
SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...
- [转载]AxureRP 7.0部件详解(一)
本文为Axure RT7.0教程,本章主要介绍menu菜单.table表格.Tree Widget 树部件三个部件,后续将持续更新...... Menu 菜单 常用案例 网站导航菜单部件通常用于母板之 ...
- SQL中的连接查询及其优化原则
连接查询是SQL的主要任务,只有很好的掌握了连接查询及其优化方法才算是掌握了SQL的精髓所在.最近在面试中遇到了有关连接查询的问题,感觉回答的不是很好,总结一下. 具体示例请参考:http://www ...
- Laravel 5 服务的注册和使用
首先我们需要创建一个服务的类,比如叫CqhServiceProvider,最简单的方式就是用artisan来帮我们创建 php artisan make:provider CqhServiceProv ...
- ThroughRain第一次冲刺个人总结
团队名:ThroughRain 项目确定:<餐厅到店点餐系统> 项目背景:本次项目是专门为餐厅开发的一套订餐系统.大家有没有发现在节假日去餐厅吃饭会超级麻烦,人很多, 热门的餐厅基本没有座 ...
- Struts2文件上传(基于表单的文件上传)
•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-Fil ...
- ok6410 android driver(3)
This article discusses the Makefile and how to port the module to different platform (localhost and ...
- C#引用C++代码
现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额.因此很多以前搞VC++开发的人都转向用更强大的VS.Net.在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类 ...
- Azure开发者任务之三:理解Azure应用程序(上)
作为Windows Azure的托管服务被设计和开发的应用程序由这两部分组成: 1,托管代码 2,XML配置文件 托管代码对应不同的角色 XML文件对应不同的配置设置 我们可以看一下下面这张图,它详细 ...
- out 和 ref 参数修饰符
整理自MSDN out: out 关键字通过引用传递参数.这与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量.若要使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字. ...