您的位置:首页 > 移动开发 > Objective-C

Objective-C面向对象-对象和类

2015-07-25 13:27 561 查看
文章都是先由本人个人博客:孙占兴:www.teilim.com,先更新,随后CSDN博客才会更新,掌握第一动态请关注本人主站。

原文链接:http://www.teilim.com/objective-cmian-xiang-dui-xiang-pian-dui-xiang-he-lei/



因学校(课设、放假)和自身(学车、买票)的事情,拖了两周没履行诺言,被我即可爱又卖萌的师父(言肆酱)发现,才想起来要写博文了,陆续把最近自学的分篇总结,写的不错给予指正,相互学习。碎碎念结束~

对象和类的介绍

对象:是对客观事物的抽象,对象是类的实例。

类:则是对象的抽象,类是一种抽象的数据类型(类似int、double、float等基本数据类型)。

打个比方,现实生活中的车分为很多种,(如汽车、卡车、自行车、bus等),他们是存在的,而车则是它们总体的抽象的概述,他们统称都可以称作为车。

类的声明和实现

类的声明:用来声明对象的属性和行为。
@interface Car {
@public
int _wheels;   //Car轮子属性
int  _speed;   //Car速度属性
NSString  *_color;    //Car颜色属性
}
@end


在以上代码中,
@interface
代表Car类的声明,而
@end
则表示Car类声明的结束,而在括号中的代码为类声明对象的属性(成员变量)。

类的实现
@implementer Car: NSObject
@end


在以上代码中,
@implementer
Car
代表Car类的实现,而
@end
则表示Car类实现的结束。
Car:
NSObject
是Car继承NSObject,在后面的博文中会介绍。

对象的创建

首先,我先说一下对象和类在下Xcode中的声明和实现,现在代码演示一下。
#import "Car.h"
#import <Foundation/Foundation.h>
int main ()
{
Car *bike = [[Car alloc]init];
Car *bus  = [[Car alloc]init];
Car *taix = [[Car alloc]init];
return 0 ;
}


在这三行代码中的alloc为在Car类型中分别给(bike、bus、taix)指针所指向的对象各分配一块内存空间,并创建_ wheels,_ speed, *_color属性。而init将为(bike、bus、taix)所指向的对象的属性进行初始化。(也可以理解bike等是Car的对象)。

成员变量的直接赋值

#import "Car.h"
#import <Foundation/Foundation.h>
int main ()
{
Car *bike = [[Car alloc]init];
bike->_wheels = 2;
bike->_speed = 20;
bike->_colour = @"红色";
NSlog(@"自行车的轮子有%d个,自行车的速度为%d km/h,自行车的颜色为%@",bike->_wheels,bike->_speed,bike->_colour);
return 0;
}


在(bike->_ wheels = 2; bike->_ speed = 20; bike->_ colour = @"红色";)代码中,我让bike对象,间接的访问Car类型中对对象声明的属性并把它们复制(需要在声明代码中➕@pubilc,因为他们的成员变量是被保护的,在后期学类的三大属性的封装后,便不再这样去操作)。

所以
NSlog(@"自行车的轮子有%d个,自行车的速度为%d
km/h,自行车的颜色 为%@",bike->_wheels,bike->_speed,bike->_colour);
将为系统打印出你在代码中所设置的属性,此处需要用手操作,方可得出结论~

对象的方法声明、实现和调用。

方法声明

Objective-C中的方法类大体似函数,同样具有:方法名、参数、返回值类型。
@interface Car {
@public
int _wheels;   //Car轮子属性
int  _speed;   //Car速度属性
NSString  *_color;    //Car颜色属性
}
- (void) run;
@end


上面代码中的
-
(void) run;
是Objective-C中对象方法必须以"-"开头,(void)必须用括号括住。

方法实现
@implementer Car: NSObject
- (void) run
{
NSlog(@“速度为%d的bike跑起来了!!!",_speed);
}
@end


方法调用
#import "Car.h"
#import <Foundation/Foundation.h>
int main ()
{
Car *bike = [[Car alloc]init];
[bike run];
return 0 ;
}


代码中
[bike
run];
[A B] A方法执行者,B方法。所以此代码理解为:bike指针对象中发送run消息(消息机制)。运行一下,看看会输出什么东西 ^_^。

匿名对象

个人理解:没有名字的对象。
#import "Car.h"
#import <Foundation/Foundation.h>
int main ()
{
[[Car alloc]init]->_spped = 100;
[[[Car alloc]init]run];
return 0 ;
}


在上述代码
[[Car
alloc]init]->_spped = 100;
中,在Car类中创建并初始化一个对象,并且直接访问该对象中的_ speed成员变量,并直接复制为100。而并没有指定某一个对象来进行此操作。
[[[Car
alloc]init]run];
而此代码,给我们直观的角度时调用run方法,其实却不是我们的想要的结果300,而是0!原因是此时我们又重新创建并且初始化另一个对象,而这个对象的本身的_
speed的成员变量为0,和之前的我们所复制的300没有关系,原因很简单,它们两个并不是同一个对象,所以互不影响,所以第二个代码中调用的run方法,输出的结果会是0~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: