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类:

 1 //
 2 //  Fraction.h
 3 //
 4 //  Created by  on 15/11/13.
 5 //  Copyright © 2015年 . All rights reserved.
 6 // interface 部分
 7
 8 #import <Foundation/Foundation.h>
 9
10 @interface Fraction : NSObject
11
12 -(void) print;
13 -(void) setNumerator :(int) n;
14 -(void) setDenominator:(int) d;
15 -(int) numberator;
16 -(int) denominator;
17
18 @end
 1 //
 2 //  Fraction.m
 3 //  HelloWorld
 4 //
 5 //  Created by  on 15/11/13.
 6 //  Copyright © 2015年 . All rights reserved.
 7 //
 8
 9 #import "Fraction.h"
10
11 @implementation Fraction
12 {
13     int numberator;
14     int denominator;
15 }
16 -(void) print{
17     NSLog(@"%i/%i",numberator,denominator);
18 }
19 -(void) setNumerator:(int)n{
20     numberator = n;
21 }
22 -(void) setDenominator:(int)d{
23     denominator = d;
24 }
25 -(int) numberator
26 {
27     return numberator;
28 }
29 -(int) denominator
30 {
31     return denominator;
32 }
33 @end
34 //----program 部分----
35 #import <Foundation/Foundation.h>
36 int main (int argc,const char * argv[])
37 {
38     @autoreleasepool {
39         Fraction *myFraction;
40
41         //创建一个分数实例 alloc分配空间  init初始化
42         myFraction = [[Fraction alloc] init];
43         //myFraction = [myFraction init];
44
45
46         //Fraction *fact = [[Fraction alloc] init];
47
48         //设置分数为1/3
49         [myFraction setNumerator:1];
50         [myFraction setDenominator:3];
51
52         //        [fact setDenominator:3];
53         //        [fact setNumerator:7];
54
55         //使用打印方法显示分数
56         NSLog(@"The value of myFraction is: %i/%i",[myFraction numberator],[myFraction denominator]);
57         //[myFraction print];
58         //
59         //        NSLog(@"Second fraction is:");
60         //        [fact print];
61     }
62     return 0;
63 }

   @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),就不详细说明啦,应该很好理解的。

  

时间: 2024-10-19 22:03:07

Objective-C 笔记二 类、对象和方法的相关文章

初探swift语言的学习笔记四(类对象,函数)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift扩展了非常多功能和属性,有些也比較奇P.仅仅有慢慢学习,通过经验慢慢总结了. 以下将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // C

java笔记--String类对象解析与运用

1.String中的equals和==的区别 String是对象而非基本数据类型,不能使用"=="来判断两个字符串是否相当, 判断两个字符串内容是否相同用equals(); 判断两个字符串内存地址是否相同用"==" 2.startsWith(String str): 判断字符串是否以str为前缀 3.endsWith(String str): 判断字符串是否以str为后缀 4.String 字符串的比较: 1).compareTo()和compareToIgnore

JAVA笔记2__类/封闭性/构造方法/方法的重载/匿名对象

public class Main { public static void main(String[] args) { Chicken c1 = new Chicken(); Chicken c2 = null; c1.eat(); System.out.println(c1.age); c2 = c1; c2.eat(); } } class Chicken{ int color; char sex; int age; void eat(){ System.out.println("chik

Java8学习笔记(二)-函数式接口与方法引用

一.Lambada表达式到底是什么 首先先看一下下面的一段代码! package cn.org.kingdom.jdk8; @FunctionalInterface interface MyInterface { void test(); String toString(); } public class Test { public void test(MyInterface inter) { System.out.println("*************************"

黑马程序员_IOS开发_Objective-C学习笔记_类(对象)

1.面向对象编程基本介绍: 面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法.对象指的是类的集合,类是对象的模板,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的安全性.重用性.灵活性和扩展性. 2.面向对象与面向过程 面向过程就是分析出解决问题所需要的步骤,然后基于这些步骤用代码和函数把这些步骤一步一步实现. 面向对象是把构成问题事务分解成各个对象,然后各个对象分别对相关的程序功能做出处

《COM原理与应用》学习笔记二——COM对象和COM接口的实现

COM对象是给用户提供服务的封装的实体.这个应该和C++中类的对象理解起来是相似的.但是有时候也把COM对象当作提供服务的那个类.COM对象也对数据进行了封装,然后也提供了接口.不过和类还是有一些不一样的.类中的数据可以申明为public,然后让用户能够直接访问这些数据成员.但是用户不能对COM对象的数据进行直接访问,只能通过接口(如果有提供这种接口的话)来对数据进行间接的访问.一般COM接口指的是一组提供服务的接口,刚开始看这个定义很不习惯.因为C++中根本没有接口的概念,但是像Java这些语

1,对象的存储细节,2,#pragma mark指令,3,函数和对象方法的区别,4,对象和方法之间的关系 ,5.课堂习题

1,对象的存储细节, 1. 当创建一个对象的时候:Person *p1 = [Person new],做了三件事情: 1,申请堆内存空间: 2,给实例变量初始化: 3,返回所申请空间的首地址; 2. 实例变量保存在堆区 3. 对象方法保存在代码区 4. 一个类可以创建多个对象: 2,#pragma mark指令, 功能:对代码分组,方便代码查找和导航 使用格式: #pragma mark - #waring 等待处理的功能,或者是未完成的功能 3,函数和对象方法的区别, 一. 对象方法: -(v

10-Objective-C特有语法:Category、类对象、description、SEL、NSLog输出增强

一.    分类-Category 1.        基本用途 OC中如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 1>.继承 2>.分类(Category) 2.        格式 分类的声明 @interface 类名 (分类名称) // 方法声明 @end 分类的实现 @implementation 类名 (分类名称) // 方法实现 @end 3.        好处 一个庞大的类可以分模块开发,可以由多个人来编写,更有利于团队合作 给系统自带的类添加分类,例如:

(一)Python入门-6面向对象编程:03类对象-类属性-类方法-静态方法

一:类对象 前面讲的类定义格式中,“class 类名:”.实际上,当解释器执行class 语句时, 就会创建一个类对象. [操作] #测试类对象的生成 class Student: pass #空语句 print(type(Student)) print(id(Student)) print(Student) s1 = Student() print(s1) Stu2 = Student s2 = Stu2() print(Stu2) print(s2) 运行结果: <class 'type'>