码迷,mamicode.com
首页 > 其他好文 > 详细

【黑马程序员】OC基本语法——类与对象相关概念

时间:2015-09-04 10:59:21      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

                                   ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

最近在学OC的面向对象部分,可能是因为以前学Java和PHP时习惯了主流的面向对象思想,接触到OC的面向对象有很多说法都不习惯,查了很多东西,终于基本都搞清楚了,在这里小结一下。

一、类和对象

1.类:类是一个抽象概念,代表着一类事物,如:人,动物,交通工具等;这个和Java或PHP里类的概念没有区别。

其定义方法如下:

@interface Student : NSObject

{

    NSString *stuName;

    int stuAge;

    int stuId;

}

2.对象:OC中也称为实例,两者为同一概念是具体的某一个类的存在,如,某一个人,某一辆汽车;这个很好理解。

其实现方法如下:

@implementation Student

 

二、类方法和对象方法

1.类方法:也称为加号方法,属于类Class一级别的方法,为该类所有对象共享,所以既可以用类名调用,也可以用对象实例调用。

如:

+ (int)classACount;

2.对象方法:也称为减号方法,属于某个实例化对象的,所以只能用对象实例调用。

如:

- (void)setStuName:(NSString *)tmpStuName;

- (NSString *)stuName;

 

三、成员变量和属性

这两者结合着说会更好理解。

比如下面的这段代码,brand和name到底有什么区别?

@interface Car : NSObject

{

    NSString *brand;

}

@property (nonatomic,copy) NSString *name;

其实,brand是私有的成员变量,其它类是访问不到这个成员变量的,这显然不利于对类进行封装。

而name是属性,对整个工程里的所有类可见,其他类是可以访问到这个成员变量的。

除此之外,在学习属性之前,要实现对成员变量的操作一般是用setter和getter方法,但这样比较繁琐;

学完属性之后可以知道,它是替代成员变量的读取方法getter 和设定方法 setter,同时也定义了成员变量。

而为了对类进?封装,一般情况下也不会直接访问成员变量, ?是通过属性访问。

因此,属性并不等同于成员变量,它的作用要大于成员变量,者对于初学者来说很容易迷惑。
 
四、对象的创建和使用
一般来说,OC中对象的创建分为三步:
1,OC中的对象通过指针来声明。如 Fraction *myFraction;
2,OC中对象的创建,使用alloc创建一个对象,这样编译器会分配给对象一块可用的内存地址: myFraction=[Fraction alloc];
3,然后对对象进行初始化,即调用init,这样对象才可以使用:myFraction=[myFraction init];

之所以单独说这个,是因为这里开始让我着实令我困惑。

在学习Java时知道,Java创建对象是直接new一个对象,然后使用构造函数在一次操作中完成对象的分配和初始化工作。而Objective-C将这两种操作拆分为两个步骤:分配和初始化。

分配(allocation):向某个类发送alloc消息的结果就是为该类分配一块足够大的内存,以存放该类的全部实例变量。

同时,alloc方法还顺便将这块内存区域全部初始化为0。初始化(initialization)从操作系统取得一块内存,准备用于存储对象。init方法几乎总是返回它们正在初始化的对象。应该像下面这样嵌套调用alloc和init方法:

  Car *car = [[Car alloc] init];

  而不是像下面这样:

  Car *car = [Car alloc];

  [car init];

  后来才意识到,这种嵌套调用技术非常重要,因为初始化方法返回的对象可能与分配的对象不同。

【黑马程序员】OC基本语法——类与对象相关概念

标签:

原文地址:http://www.cnblogs.com/TonyScript/p/4781368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!