您的位置:首页 > 职场人生

黑马程序员——对象的学习

2015-10-01 12:49 253 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

[b]对象[/b]  

  对象和结构类似。和结构一样,一个对象可以保存多个相关的数据。在结构中,我们称这些数据为成员。而在对象中,我们称这些数据为实例变量。 对象和结构的不同在于:对象还可以包含一组函数,并且这些函数可以适用对象所保存的数据。这类函数称之为方法。
  类负责表述摸个特定类型的对象,其中包含方法和实现变量。
  以一个命名为Person的类为例:由Person类创建的对象,成为它的实例。Person实例将使用实例变量来保存身高和体重,Person实例还将包含计算BMI的方法。如下所示:
                                   类就像是工厂

Person
heightInMeters: float

weightInKlios:int

- bodyMassIndex
                                   他生产的实例

Person
heightInMeters:1.7

weightInKlios:96

- bodyMassIndex
[b]创建并使用对象[/b]  

  以NSDate类为例,NSDate的实例代表某个时间点,可以把它当做一个时间戳。在main.m中,增加以下代码:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[ ])
{
@autoreleasepool {
NSDate *now = [NSDate date];
NSLog(@"This date is %@", now);
}
return 0;
}


  从代码中可以看出,OC与C语言的一点不同,包含头文件的指令采用的是#import,这和C语言中的#include有什么区别呢?#import指令导入更快更有效。#include指令告诉编译器做呆板的复制粘贴,将包含的内容粘贴到目标文件中,而#import指令则会让编辑器先检查之前是否已经导入过这个文件,或是已经被包含到目标文件中了。

[b]方法和消息[/b]

  NSDate类中有一个date方法。在以上代码中,我们向NSDate类发送了date消息,让它执行date方法。

NSDate *now = [NSDate date];


  这就是一条发送消息的语句,在[NSDate date]中:
  NSDate称为接收方:指针,指向接收消息的对象的地址。
  date称之为选择器:方法名,要触发的反法的方法名。

  在date方法执行后,NSDate实例声明一部分内存,将NSDate实例初始化为当前的日期/时间,然后返回新对象的地址。指针now中则保存了NSDates实例在内存中的地址。我们可以调用NSlog()函数,将其内容打印出来。

NSLog(@"This date is %@", now);


  现在有了NSDate实例,可一给这个新对象放送消息,比如发送timeIntervalSince1970给它。
  此方法会算出“自己”和1970年1月1日12:00 AM(GTM)之间的时差(以秒为单位),然后把结果返回给你。(为什么选择1970年呢?因为OS X和IOS 系统都是基于Unix开发的,而1970年正是“Unix 时代”的开始。)
  发送timeIntervalSince1970给now变量指向的NSDate实例,此方法会返回一个双精度数,所以我们把这个结果保存在一个双精度变量中,代码如下:

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[ ])
{
@autoreleasepool {
NSDate *now = [NSDate date];
NSLog(@"This date is %@", now);

double seconds = [now timeIntervalSince1970];
NSLog(@"It has been %f seconds since the start of 1970.", seconds);
}
return 0;
}


[b]类方法和实例方法[/b]

  上述代码中增添了两条消息,分别是:

NSDate *now = [NSDate date]
double seconds = [now timeIntervalSince1970]


  第一条给NSDate类发送date消息,date是一个类方法。通常来说,类方法会创建类的实例,并初始化实例变量。
  第二条是给now变量指向的NSDate实例发送了timeIntervalSince1970消息,timeIntervalSince1970是一个实例方法。通常来说,实例方法会提供实例中实例变量的信息,或是对实例的实例变量进行操作。

[b]发送消息的注意项[/b]

不能发送错误消息;

将类方法发送给实例或者将实例方法发送给类,都会引起编译器报错,当然输入错的方法名称也是不能通过编译。
注意大小写;

Objective-C是区分大小写的,因此,timeIntervalSince1970和timeintervalsince1970是两个不同的消息。

[b]Objective-C语言的命名习惯[/b]

指向实例的变量使用“骆驼拼写法”来命名。以小写字母开头,接下来每个单词的首字母用大写,如now、weigtLifer、myCurrentLocation。

方法的命名也使用“骆驼拼写法”,如date、bodyMassIndex。

类的名称以大写字母开头,但接下来的单词继续使用“骆驼拼写法”,如NSDate、Person、NSMutableArray。

很多苹果创建的类型和常量的命名也是前缀大写的“骆驼拼写法”,如NSInteger并不是类,它只是一种整形类型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: