zoukankan      html  css  js  c++  java
  • 黑马程序员——对象的学习

    • 对象  

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

    Person

    heightInMeters: float

    weightInKlios:int

    - bodyMassIndex

                                         他生产的实例

    Person

    heightInMeters:1.7

    weightInKlios:96

    - bodyMassIndex

      

    • 创建并使用对象  

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

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

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

    • 方法和消息

      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实例,此方法会返回一个双精度数,所以我们把这个结果保存在一个双精度变量中,代码如下:

     1 #import <Foundation/Foundation.h>
     2 int main (int argc, const char * argv[ ])
     3 {
     4         @autoreleasepool {
     5                 NSDate *now = [NSDate date];
     6                 NSLog(@"This date is %@", now);
     7                 
     8                 double seconds = [now timeIntervalSince1970];
     9                 NSLog(@"It has been %f seconds since the start of 1970.", seconds);
    10         }
    11         return 0;
    12 }
    • 类方法和实例方法

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

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

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

    • 发送消息的注意项
    1. 不能发送错误消息;
    2. 将类方法发送给实例或者将实例方法发送给类,都会引起编译器报错,当然输入错的方法名称也是不能通过编译。
    3. 注意大小写;
    4. Objective-C是区分大小写的,因此,timeIntervalSince1970和timeintervalsince1970是两个不同的消息。
    • Objective-C语言的命名习惯
    1. 指向实例的变量使用“骆驼拼写法”来命名。以小写字母开头,接下来每个单词的首字母用大写,如now、weigtLifer、myCurrentLocation。
    2. 方法的命名也使用“骆驼拼写法”,如date、bodyMassIndex。
    3. 类的名称以大写字母开头,但接下来的单词继续使用“骆驼拼写法”,如NSDate、Person、NSMutableArray。
    4. 很多苹果创建的类型和常量的命名也是前缀大写的“骆驼拼写法”,如NSInteger并不是类,它只是一种整形类型。
  • 相关阅读:
    [C++] Const Summary (mind map)
    [C++] Operator Overload
    [C++] Deep copy ,Shallow copy, copy constructor,"="
    [C++] CONST 2
    [C++] * Basic and Class
    《Javascript权威指南-第6版》
    Bootstrap源码分析系列之初始化和依赖项
    Bootstrap源码分析系列之整体架构
    CSS模糊效果
    韩顺平php从入门到精通
  • 原文地址:https://www.cnblogs.com/aisleep/p/4850731.html
Copyright © 2011-2022 走看看