01. Objective-C面向對象編程

1. 面向對象編程

用解決現實中的問題的辦法來解決計算機問題。

1.1 對象

Anything is Object. 萬物皆對象。

現實中對象是一種客觀的存在,程序中對象是一片內存空間。

對象之間各司其職,各盡所能,對象功能單一。對象之間通過發消息來互相合作,形成一個系統。

對象

有什麼      屬性

能幹什麼   方法

1.2 類

就是類型,這兒理解爲用戶自定義的類型。

          int double float ... 基本數據類型

          TRDate ...               用戶自定義類型

類是一種主觀的認識,是對我們需要解決的問題的一種抽象,是創建對象的模型。 

1.3 定義類

    @interface 類名 : NSObject

         屬性的定義

         方法的聲明

    @end

    讓類繼承NSObject是因爲需要類擁有相應的能力,比如內存分配能力等。

    @implementation 類名

         方法的定義

    @end

1.4 創建對象

    類名* obj = [類名 alloc];

    [obj 消息]; //給對象發消息

    對象收到消息會調用方法。方法其實是一種特殊的函數。


2. 內存分配

    OC中的對象全部放在堆中。 要使用堆中的對象,必須使用指針指向對象。經常把這個指針叫"引用"。要讓對象工作,就給對象發消息,如果對象響應消息,就會調用對應的方法。消息是通過引用發的。

    堆內存,分配和釋放不是自動的,而是由程序控制的。

    堆裏放的是對象,棧裏放的是引用,引用指向了對象。



3. 實際開發中類定義的文件分離

              一個類,一般會分成兩個文件,一個.h,一個.m。

              .h文件中定義類的interface部分,.m文件中定義類的implementation部分。類名和文件名應該保持一致。

//以下代碼在XCode下編寫main.m

#import <Foundation/Foundation.h>
@interface MyFirstClass : NSObject   //繼承NSObject,是所有類的老祖宗,分配內存空間
@Property int prop1;    //屬性的定義
- (void) method1;      //方法的聲明
@end

//實現部分
@implementation MyFirstClass
- (void) method1
{
NSLog(@"我是一個方法");
}
@end


@interface TRDog : NSObject  //狗類
@property NSString *name;    //OC語言特有的類型,用戶自定義類型需指針
- (void)bark;
@end

@impementation TRDog
-(void)bark
{
NSLog(@"%@在旺旺的叫", self.name);   //%@打印字符串
}
@end

TRDog* getDog()
{
        TRDog *dog = [TRDog alloc];
        dog.name = @"小Mu";
        return dog;  //對象在堆中,可以返回
}

int main(int argc, const char* argv[])
{
@autoreleasepool{
MyFirstClass *obj = [MyFirstClass alloc];   //對象的創建
[obj method1];   //調用方法
TRDog *dog = [TRDog alloc];
dog.name = @"旺財";
[dog bark];
TRDog *dog2 = getDog();
[dog2 bark];
//[obj release];  //編譯器會自動寫上
//[dog release];
//[dog2 release];
}
return 0;
}


//重新新建一個文件TREmployee.h,定義一個employee類
#import <Foundation/Foundation.h>
//類的接口部分
@interface TREmployee : NSObject
//定義屬性
@property NSString *name;
@property int age;
@property BOOL gender;
@property double salary;
//聲明部分
- (void) show;
@end

//新建一個文件TREmployee.m,寫implementation部分
#import "TREmployee.h"    //需import
@implementation TREmployee
- (void) show
{
        NSLog(@"%@,%@,%d,%.2lf", self.name, self.gender?@"男":"女", self.age, self.salary);
}
@end

//main.m中:
#import "TREmployee.h"
void test2()
{
        TREmployee *e = [TREmployee alloc];
        e.name = @"Daniel";
        e.age = 30;
        e.gender = YES;
        e.salary = 123456.78;
        [e show];
        //[e release];        
}

int main(int argc, const char* argv[])
{
@autoreleasepool{
test2();
}
return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章