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

------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];

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

时间: 2024-10-20 18:53:33

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

黑马程序员 oc中的类与对象

类就好像一张图纸,而对象就是通过这个图纸创造出来的实物,一个类可以创造出多个对象,对象之间可以是不同的,根据成员变量值的不同即属性不同,对象也就 会不同,做出的行为状态也不同,例如一个车类,它的属性有speed,wheels等,根据speed值的不同可以区分对象,做出跑的状态不同,有的 speed是250km/h,有的speed是300km/h.     在oc中类的设计和对象的创建// 只要import Foundation.h就能使用Foundation框架里的所有头文件#import  <

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

黑马程序员— OC基本语法、类和对象、三大特性

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲     OC简介及基本语法 Objective-C简称OC是在C语言的基础上,增加了一层最小的面向对象语法,完全兼容C语言,也就是可以在OC代码中混入C语言代码,甚至是C++代码.可以使用OC开发Mac OS X平台和IOS平台的应用程序.简单的介绍了一下OC,下面我们来看看OC的基本语法,学习OC之前我们先学习了C语言,因为OC是在C语言的基础上的一门开发语言,因此OC的很多基本语法

黑马程序员—OC点语法和成员变量作用域

一.点语法 1.OC中点语法是方便从事别的语言开发的程序员迅速的转到OC开发当中,先看下面这个例子: 1 // 声明一个Person类 2 @interface Person : NSObject 3 { 4 int _age; 5 NSString *_name; 6 } 7 - (void)setAge:(int)age; 8 - (int)age; 9 @end 10 11 // 实现Person类 12 @implementation Person 13 - (void)setAge:(

黑马程序员-OC基本语法

OC是C系列语言,是面向对象的语言,而C语言是面向过程的,那么首先要理解面向对象和面向过程的区别. 面向过程是专注“事件”本身,这件事从发生到结束的行为.例如怎么把大象装进冰箱,面向过程的思想是这样的,首先打开冰箱门,把大象装进去,然后把冰箱门关上.而面向对象是专注于“事物”本身的,同样是装大象,面向对象的思想是这样的,什么东西能装大象去,找到能装大象的冰箱嘛~~~~ 面向对象有2个非常重要的概念,类和对象.首先要有类,就是对象的模板,然后用类来创建对象,OC中的语法是这样的: 1 #impor

黑马程序员---Objective-C基础学习---类、对象、方法相关知识笔记

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 类.对象.方法相关知识笔记 Objective-C相对于C语言有了面向对象的特性,但是ObjC又没有其他面向对象语言那么多语法特性,ObjC本身对面向对象进行了精简.下面是一些相关知识笔记. 类定义 成员变量 方法和属性 self关键字 类定义 在C#.Java等其他高级语言中定义一个类是相当简单点的,直接一个关键字class加一对大括号基本就完成了,但是在ObjC中类的定义相对变化比较大.现

黑马程序员-Java基础-面向对象-类和对象、封装、构造函数、this、static、饿汉式&amp;懒汉式

第一讲  面向对象概念 1.  定义 相对于与面向过程而言的,将功能封装进对象,我们只关心具备了该功能的对象,而不用关注对象的具体细节. 面向对象的特点:使复杂问题简单化.我们只关心什么对象能处理什么事情,而不用关心具体的实现细节. 2.  面向对象特征 封装.继承.多态. 第二讲  类和对象的关系 1.  概述 类就是:对现实生活中事物的描述,可以是实体的事物也可以是一件事等: 对象是:是某类事物的实例,实实在在存在的个体: 映射到java中,描述就是class定义的类. 具体对象就是对应ja

黑马程序员— OC核心语法之构造方法、Category分类、类的本质、description和SEL

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC的一些核心语法,初步了解了OC作为一门开发语言的一些较为深层次的知识.本章我们继续学习OC的核心语法,主要包括OC的构造方法,Category分类,类的本质及深入研究,以及description关键字和SEL关键字. 第一讲     构造方法 1. 构造方法 构造方法是用来初始化对象的方法,是一个对象方法,以减号"-"开头,构造方法其实就是init方法,初始化完毕

黑马程序员————OC中点语法、id类型和构造方法

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- id:万能指针(内部已经包含*),能指向任何OC对象,只能使用于OC对象   id == NSObject * 构造方法:用来初始化对象的方法,是个对象方法,而且减号开头   init 完整地创建一个可用的对象 1.分配存储空间    +