Objective-C 笔记二 类、对象和方法
对象就是一个物件。面向对象的程序设计可以看成一个物件和你想对它做的事情。这与C语言不同,C语言通常称为过程性语言。在C语言中,通常是先考虑要做什么,然后才关注对象,这几乎总是与面相对象的思考过程相反。
在面向对象的用语中,(这里我们以汽车作为对象)你的汽车是汽车的一个实例。car就是类的名称,这个实例就是从该类创建的。因此,每制造一辆新汽车,就会创建汽车类的一个新实例,而且汽车的每个实例都称为一个对象。
| 对象 | 使用对象执行的操作 |
| 你的汽车 | 驾驶 |
| 加油 | |
| 洗车 | |
| 维修 |
每个实例或对象不仅包含从制造商那里获得的有关原始特性的信息,还包含它的当前特性,这些特性可以动态改变。当你驾驶汽车时,邮箱的油渐渐耗尽,汽车越来越脏,轮胎也逐渐磨损。
对象使用方法可以影响对象的状态。如果方法是“给汽车加油”,那么执行这个方法之后,汽车的邮箱会加满。这个方法影响了汽车邮箱的状态。
这里关键的概念是:对象是类的独特表示,每个对象都包含一些通常对该对象说是私有的信息。方法提供访问和改变这些数据的手段。
[ClassOrInstance method ];
在这条语句中左方括号后要紧跟类的名称或者该类的实例名称,它后面可以是一个或多个空格,空格后面是将要执行的方法。最后,使用右方括号和分号来终止。请求一个类或实例来执行某个操作时,就是在向它发送一条消息,消息的接收者称为接收者。因此,有另一种方式可以表示前面所描述的一般格式:
[ receiver message ];
回顾上一个列表,使用这个新语法为它所编写所有的方法。在此之前,你需要获得一辆新车,去制造厂购买一辆:
yourCar = [Car new]; get a new car //这书写的真详细,不就是new一个对象么!就是yourCar现在就是你的车,你可以用它引用汽车的实例。
有了新车就要有新车的方法,所以这个新方法可叫作制造厂方法,或者类方法:
[yourCar prep]; get it ready for first-time use
[yourCar drive]; drive your car
[yourCar wash]; wash your car
[yourCar getGas]; put gas in your car if you need it
[yourCar service]; service your car
[yourCar topDown]; if it's a convertible
[yourCar topUp];
currentMileage = [yourCar odometer];
最后一个示例显示的实例方法可返回信息,即当前行驶里程,这通过里程表(odometer)可看出来。我们将该信息存储在程序中的currentMileage变量内。
这里有一个将特定值作为方法参数的例子,与方法直接调用有所不同:
[yourCar setSpeed:55]; set the speed to 55 mph
你姐姐Sue可以对她自己的汽车实例使用相同的方法;
[suesCar drive];
[suesCar wash];
[suesCar getGas];
将同一个方法应用于不同的对象是面向对象程序设计背后的主要理念之一。
用于处理分数的Objective-C类
假设要编写一个处理分数的程序,可能需要处理加、减、乘、除等运算。创建了一个Fraction类:
//
// Fraction.h
//
// Created by on 15/11/13.
// Copyright © 2015年 . All rights reserved.
// interface 部分 #import <Foundation/Foundation.h> @interface Fraction : NSObject -(void) print;
-(void) setNumerator :(int) n;
-(void) setDenominator:(int) d;
-(int) numberator;
-(int) denominator; @end
//
// Fraction.m
// HelloWorld
//
// Created by on 15/11/13.
// Copyright © 2015年 . All rights reserved.
// #import "Fraction.h" @implementation Fraction
{
int numberator;
int denominator;
}
-(void) print{
NSLog(@"%i/%i",numberator,denominator);
}
-(void) setNumerator:(int)n{
numberator = n;
}
-(void) setDenominator:(int)d{
denominator = d;
}
-(int) numberator
{
return numberator;
}
-(int) denominator
{
return denominator;
}
@end
//----program 部分----
#import <Foundation/Foundation.h>
int main (int argc,const char * argv[])
{
@autoreleasepool {
Fraction *myFraction; //创建一个分数实例 alloc分配空间 init初始化
myFraction = [[Fraction alloc] init];
//myFraction = [myFraction init]; //Fraction *fact = [[Fraction alloc] init]; //设置分数为1/3
[myFraction setNumerator:];
[myFraction setDenominator:]; // [fact setDenominator:3];
// [fact setNumerator:7]; //使用打印方法显示分数
NSLog(@"The value of myFraction is: %i/%i",[myFraction numberator],[myFraction denominator]);
//[myFraction print];
//
// NSLog(@"Second fraction is:");
// [fact print];
}
return ;
}
@interface部分用于描述类和类的方法;@implementation部分用于描述数据(类对象的实力变量存储的数据),并实现在接口中声明方法的实例代码;program部分的程序代码实现了程序的预期目的。
@interface部分
一般格式类似于:
@interface NewClassName: ParentClassName
propertyAndMethodDeclarations;
@end
按照约定,类名一般以大写字母开头。
- 变量名的名称规则:名称必须以字母或下划线(_)开头,之后可以是任何(大写或者小写)字母、下划线或者0~9之间的数字组合。
- 有些名称不能用作于变量名,例如int。因为其用途对Objective-C编译器而言有特殊含义,这种用法称为保留名或保留字。(就是系统关键字)
- Objective-C中的大小写字母是有区别的,变量名sum、Sum和SUM均表示不同的变量。
类方法和实例方法
-(void) print;
开头的负号(-)通知Objective-C编译器,该方法是一个实例方法。此外,还有一个选择,就是正好(+),它表示类方法。类方法是对类本身执行某些操作的方法,例如,创建类的新实例。
1、返回值
-(int) currentAge;
声明新方法时,必须要告诉OC编译器该方法是否有返回值。括号里就是方法的返回值类型!该方法指定名为currentAge的实例方法将返回一个整型值。
例:double双精度值,void代表无返回类型。
2、方法的参数
-(void) setNumberator: (int) n;
这是一个无返回值类型的实例方法,int用于指明参数类型。就setNumberator来说,其参数名就是n。这个名称可以是任意的。
@implementation部分
@implementation部分包含声明在@interface部分的方法的实例代码,且需要指定存储在类对象中的数据类型。(就是接口类,和实现类)
@implementation部分的一般格式如下:
@implementation NewClassName
{
memberDeclarations;
}
methodDefinitions;
@end
memberDeclarations部分指定了哪种类型的数据将要存储到Fraction中,以及这些数据类型的名称。
program部分
program部分包含解决特定问题的代码,如果有必要,它可以跨越多个文件。其中必须在某个地方有一个名为main的函数,通常情况下,这是程序开始执行的地方。
Fraction *myFraction;
这一行表示myFraction是一个Fraction类型的对象。
myFraction = [[Fraction alloc] init];
alloc是allocate的缩写,因为要为新分数分配内存存储空间。
init方法用于初始化类的实例变量。注意,你正将init消息发送给myFraction。也就是说,要在这里初始化一个特殊的Fraction对象,因此,它没有发送给类,而是发送给了类的一个实例。
init方法也可以返回一个值,即被初始化的对象。将返回值存储到Fraction的变量myFraction中。
让我们重新回到Fraction *myFraction;
myFraction前的星号(*)表明myFraction是Fraction对象的引用(或指针)。变量myFraction实际上并不存储Fraction的数据,而是存储了一个引用(其实是内存地址),表明对象数据在内存中的位置。
好啦!其它的就是些设值方法(setter)和取值方法(getter),就不详细说明啦,应该很好理解的。
Objective-C 笔记二 类、对象和方法的更多相关文章
- Python的高级特性8:你真的了解类,对象,实例,方法吗
Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...
- Java学习笔记-File类的基本方法
要渐渐养成写博客的习惯-----> 前段时间看Mars的java中的I/O流没怎么懂,发现I/O流好难啊.今天重新看一遍其他教学,还有书籍,做些笔记,记录下每天的学习生活. File类的一些方法 ...
- Java SE学习笔记 --->高级类特性 ---> toString() 方法
概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...
- day 1类 对象 属性 方法
1. 解决吃啤酒鸭的问题 第一种方式(面向过程): 1)养鸭子 2)鸭子长成 3)杀 4)作料 5)烹饪 6)吃 7)卒 第二种方式(面向对象): 1)找个卖啤酒鸭的人 2)给钱 交易 3)吃 4)胖 ...
- 笔记||Python3之对象的方法
什么是对象的方法? python中的一切类型的数据都是对象. 对象:数据和方法 对象数据:如 a = 'sfd' 对象方法:其实就是属于该对象的函数 对象的方法调用:对象.方法 字符串对象常用的方法: ...
- JAVA笔记2__类/封闭性/构造方法/方法的重载/匿名对象
public class Main { public static void main(String[] args) { Chicken c1 = new Chicken(); Chicken c2 ...
- 初探swift语言的学习笔记四(类对象,函数)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- java笔记--String类对象解析与运用
--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877236.html "谢谢-- 1.String中的equals和==的 ...
- Python笔记(二十三)_魔法方法_字符串的魔法方法
__str__和__repr__ 如果要把一个类的实例变成字符串,就需要实现魔法方法__str__()和__repr__ >>>class A: def name(self): re ...
随机推荐
- java Active Object模式(上)
Active Object模式简介 Active Object模式是一种异步编程模式.它通过对方法的调用与方法的执行进行解耦来提高并发性.若以任务的概念来说,Active Object模式的核心则是它 ...
- Nah Lock: 一个无锁的内存分配器
概述 我实现了两个完全无锁的内存分配器:_nalloc 和 nalloc. 我用benchmark工具对它们进行了一组综合性测试,并比较了它们的指标值. 与libc(glibc malloc)相比, ...
- POJ3126 Prime Path(BFS)
题目链接. AC代码如下: #include <iostream> #include <cstdio> #include <cstring> #include &l ...
- COJ 2004 序列
传送门:http://oj.cnuschool.org.cn/oj/home/addSolution.htm?problemID=978 试题描述: WZJ的数字游戏又开始了.他写了N个自然数Ai到黑 ...
- Linux kernel ‘ip6_sk_dst_check’函数拒绝服务漏洞
漏洞名称: Linux kernel ‘ip6_sk_dst_check’函数拒绝服务漏洞 CNNVD编号: CNNVD-201307-070 发布时间: 2013-07-05 更新时间: 2013- ...
- sed的选项与命令简要
第一部分:sed命令选项 sed选项 说明 -n, --quiet, --silent 静默模式,取消将模式空间中的内容自动打印出来. -e script, --expression=script 以 ...
- 数据结构(跳跃表):NOI 2004 郁闷的出纳员
郁闷的出纳员 [问题描述] OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常, ...
- 汉洛塔递归实现的思考(C语言)
汉洛塔是古印度神话产生的智力玩具,他的玩法是,有三个柱子分别为A,B,C,A柱上面有n个盘子上面小下面大堆叠放在一起,现在要求激将A柱上的盘子全部移到C柱上面,并且一次只能移动一个盘子,必须是小盘在大 ...
- UVa11613 Acme Corporation(最小费用流)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33452 [思路] 最小费用流. 构图: 1 每个月建立2个点,建立 ...
- RCMTM _百度百科
RCMTM _百度百科 RCMTM