OC语言基础知识

一、面向对象

OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能的类。

术语:OO面向对象、OOP面向对象编程

二、类

(一)关于类

类的设计只关注三个东西:类名、属性和方法

注意:一般名词都是类,拥有相同属性和行为的对象都可以抽象为一个类,类名是标识符的一种,需要符合规范,通常类名的第一个字母大写,且不能有下划线,如果有多个单词则使用驼峰标识。在对方法进行类的划分中,一般采取的做法是谁最熟悉这个方法那么就把这个方法划分给谁。在OC中,对象对方法的调用称为消息机制,即向既定的对象发送了什么消息。

(二)简单内存分析

类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成员变量,所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份存储空间,类的方法存储于此。

每个对象内部都默认有一个isa指针指向这个对象所使用的类。

[p eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的isa指针找到存储于类中的方法,执行。

isa是对象中的隐藏指针,指向创建这个对象的类。

(三)类的声明和实现

1)类的声明:

这里声明了一个Person类,这个类拥有一个@public修饰的属性(成员变量),以及一个对象方法put。


2)类的实现:类的声明可以理解为类中的方法的实现


3)类的调用:在主函数首先创建了一个Person类型的对象(先调用alloc分配存储空间,后调用init方法初始化为0),并定义了一个Person类型的指针指向创建的这个对象,之后初始化对象成员变量_age的值为20,然后调用了对象的put方法,打印输出。


4)练习,创建一个Person类。

类的声明:


类的实现如下:


类的调用如下:


(四)常见错误

(1)@interface @end和@implementation @end不能嵌套包含

(2)只有类的声明没有类的实现

(3)漏写@end

(4)两个类的声明嵌套(可以把顺序打乱)

(5)成员变量没有写在{}里

(6)方法的声明写在了{}里面

(7)在声明时对类的成员变量进行初始化,请注意成员变量不能脱离对象而独立存在

(8)方法无法像函数那样的调用

(9)成员变量和方法不能用static等关键字修饰,不要和c语言混淆

(10)类的实现可以写在mian函数后面,在使用之前只要有声明就可以

三、OC对象与函数

OC对象与函数有着本质的区别:

(1)方法的实现只能写在@implementation··@end中,对象方法的声明只能写在@interface···@end中间

(2)对象方法都以-号开头,类方法都以+号开头

(3)对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用

(4)函数属于整个文件,可以写在文件中的任何位置,包括@implementation··@end中,但写在@interface···@end会无法识别,函数的声明可以再main函数内部也可以在main函数外部。

(5)对象方法归类\对象所有

(6)函数调用不依赖与对象

(7)函数内部不能直接通过成员变量名访问对象的成员变量

四、类和方法的设计

工具类:基本没有任何的成员变量,里面的方法基本都是类方法。

注意:在对象方法中可以调用类方法。

需求:设计一个工具类:一个计算器类,要求(1)返回π,(2)计算两个整数的和,(3)计算某个整数的平方。

类的声明部分


类的实现部分


测试程序:

时间: 2024-09-17 01:53:15

OC语言基础知识的相关文章

IOS开发之路--C语言基础知识_IOS

概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用

c语言基础问题-小白求解c语言基础知识

问题描述 小白求解c语言基础知识 为什么点编译没出现错误,点建立出现错误 解决方案 建议百度二级c语言加油站,下载里面的vc++6.0完整版就不会出现你这样的问题了 解决方案二: include 中间的空格去掉 解决方案三: 我记得code::blocks是需要编译之后再点一次运行才可以 解决方案四: 这个应该是没有问题的,在编译一次,实在不行,卸掉vc,重新装一次

《数据驱动的网络分析》——6.2 R语言基础知识

6.2 R语言基础知识 本节是R语言的速成教程.R是一种特性丰富的语言,我也只是略懂一二.但是,在本节结束时,你就能够编写简单的R程序,在命令行上运行,并将其保存为一个库. 6.2.1 R提示符 启动R,将会显示一个窗口和命令提示符.图6-1展示了一个R控制台的例子.如图所示,控制台主要是一个大的文本窗口,顶部的一系列按钮提供了辅助功能.注意按钮栏下的两个文本框,第一个显示当前工作目录,第二个是帮助功能.R有很好的文档,所以一定要习惯使用帮助框. 在图6-1中,我输入了几条简单的命令: > s<

(1)巩固一下C语言基础知识,谁动手,谁收获。

参加的一个比赛里面的基础性的C语言小程序编写,大家可以练习一下,巩固一下基础知识.不要拷贝别人的代码,自己亲自动手写一下,别管是否简单.  问题1:   编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤.(20分)    a12  b8  c5    12   0   0    *    *   *( "*"表示当前状态下每个容器的盛水量)    ......    6    6   0 问题2: 编程实现:有二维数组a[

VBScript语言 基础知识

vbscript 一.VBScript语言概述 我们都希望制作出的网页既精致美观又生动活泼而且功能强大,用VBScript语言可以实现这一愿望. VBScript是Microsoft Visual Basic的简化版本. VBScript是特意为在浏览器中进行工作而设计的. 编程方法和Visual Basic基本相同 . VBScript只有一种数据类型,即,Variant类型. VBScript不支持Visual Basic中传统的I/O功能,即不能通过Open语句和函数在客户机上读写文件,这

第二讲 Java语言基础知识

概述: [课前思考] 1. Java中的标识符是由哪些字符组成的? 2. Java中有哪些保留字?简单数据类型包含哪几种?各种数据类型变量的定义方法和常量的表示方法及取值范围. 3. Java 中各简单数据类型间的优先次序和自动转换规则是什么? 各数据类型间在什么情况下,进行自动转换,在什么情况下使用强制转换? 4. Java中有哪些运算符?这些运算符的优先关系是怎样的? 5. Java 中有哪些控制语句?你了解每一种控制语句的语法规则吗? 6. Java 中的一维数组和多维数组在数组动态初始化

Go语言基础知识总结(语法、变量、数值类型、表达式、控制结构等)_Golang

一.语法结构 golang源码采用UTF-8编码.空格包括:空白,tab,换行,回车. - 标识符由字母和数字组成(外加'_'),字母和数字都是Unicode编码. - 注释: 复制代码 代码如下: /* This is a comment; no nesting */ // So is this. 二.字面值(literals)类似C语言中的字面值,但数值不需要符号以及大小标志: 复制代码 代码如下: 23 0x0FF 1.234e7类似C中的字符串,但字符串是Unicode/UTF-8编码的

(3)巩固一下C语言基础知识,谁动手,谁收获。

问题12: 编写一个简单的通讯录管理系统.通讯录包括:姓名.通讯地址.邮编.联系电话,现编写一个通讯录管理系统,可以对通讯录进行输入.显示.查找,通讯录保存到一个文件中.(50分) (提示:可能用到以下库函数: malloc(),功能:分配size字节的存储区, 用法:(类型 *)malloc(size *sizeof(你要定义的类型)):包含于<stdlib.h>库中 feof(),功能:检测文件是否结束 用法: int feof(fp) FILE *fp:包含于<stdio.h>

(7)巩固一下C语言基础知识,谁动手,谁收获。

问题23:  编程解决如下问题(50  分)  .  有一个数学等式:ABCD*E=  DCBA,式中的一个字母代表一位数字,试找出所有符合上述  要求的乘积式并打印输出.   问题24: 编程解决如下问题(50  分)  .  请在整数  n=92081346718538  中删除  10个数字,  使得余下的数字按原次序组成的新数最 大.要求如下:  (1)整数  n和删除数字的个数"10"在源程序中完成赋值,程序直接输出运行结果: (2)程序结果输出先后被删除的数字(之间以逗号分