Objective-C知識總結(2)

來源:互聯網
上載者:User

標籤:

每一個執行個體變數定義兩個方法:設定變數的setter方法 擷取變數值的getter方法

set方法的書寫規範

  1. set方法一定是一個對象方法

  2. set方法一定不能有傳回值

  3. set方法必須以set開頭

  4. set之後跟的是 執行個體變數去掉底線,並且首字母大寫

  5. set方法一定有參數,而且參數的類型和執行個體變數的類型一致

  6. set方法的形參名 一般是 去掉下環線的執行個體變數名

  7. 形參名不能和 執行個體變數名同名

  8. set方法實現中,一定要用形參給執行個體變數賦值

get方法的書寫規範

  1. get方法一定是一個對象方法

  2. get方法一定有傳回值,傳回值的類型和執行個體變數的類型要一致

  3. get方法的方法名 是去掉下環線的執行個體變數名

  4. get方法一定沒有參數

  5. get方法的實現中,一定是返回執行個體變數值

下面示範set和get方法的代碼

我們建立一個Person類在.h檔案中的代碼如下:

#import <Foundation/Foundation.h>@interface Person : NSObject{    NSString *_name;    int _age;}// 成員變數_name的setter方法和getter方法的聲明- (void)setName:(NSString *)name;- (NSString *)name;// 成員變數_age的setter方法和getter方法的聲明- (void)setAge:(int)age;- (int)age;@end

.m檔案中的代碼如下:

#import "Person.h"@implementation Person// 成員變數_name的setter方法和getter方法的實現- (void)setName:(NSString *)name{    _name = name;    }- (NSString *)name{    return _name;}// 成員變數_age的setter方法和getter方法的實現- (void)setAge:(int)age{    //在這可以限制輸入的年齡是否合法    if (age >= 18) {        _age = age;    } else {        _age = 18;    }    }- (int)age{    return _age;}@end

OC中沒有方法的重載,所謂的參數多一個是因為方法的名稱變了,提示:do: : : :

OC中static關鍵字的使用:唯一要注意的是成員變數不能定義成static,其它時候的使用跟C語言中一樣,請看我之前的部落格    >---點我就能看到---<

OC中的self關鍵字,self用到類方法中代表本類,self用到對象方法中表示這個對象

self修飾變數:會訪問成員變數請看代碼:(依然根據Person類)在.m檔案中

// 成員變數_name的setter方法和getter方法的實現- (void)setName:(NSString *)name{      self->speed = speed;//   self->speed等價於_name//    _name = name;    }- (NSString *)name{    return _name;}

這裡再次說一下關於面對對象的四大特性分別為

1.抽象   2.封裝    3.繼承    4.多態

抽象性:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算瞭解全部問題,而只是選擇其中的一部分,暫時不用部分細節。比如,我們要設計一個學產生績管理系統,考察學生這個對象時,我們只關心他的班級、學號、成績等,而不用去關心他的身高、體重這些資訊。抽象包括兩個方面,一是過程抽象,二是資料抽象。過程抽象是指任何一個明確定義功能的操作都可被使用者看作單個的實體看待,儘管這個操作實際上可能由一系列更低級的操作來完成。資料抽象定義了資料類型和施加於該類型對象上的操作,並限定了對象的值只能通過使用這些操作修改和觀察。 

有關於封裝,繼承,多態請看我之前的部落格(還介紹了分類)    >---請點擊這裡---<

成員變數修飾符的介紹

  • @public     公開的, 在任何地方通過執行個體對象都可以訪問
  • @private    私人的,表示只能在當前類中使用  不可以在子類中使用 但是被子類繼承的

  • @protected  受保護類型,表示只能在當前類和子類中訪問(預設是protected)

description方法:重寫父類的description方法可以改變NSLog的輸出

如果在-description方法中使用NSLog列印self 會造成死迴圈

代碼如下

//重寫父類的description-(NSString *)description{  //  do something....  // 例如  return [NSString stringWithFormat:<#(NSString *), ...#>];}

類的本質是對象 

類對象屬於Class類型

// 擷取類對象的2種方式Class c = [Person class]; // 類方法// 或者Person *p = [Person new];Class c2 = [p class]; // 對象方法

類方法中不能調用成員變數

SEL

1.方法的儲存位置

  • 每個類的方法列表都儲存在類對象中
  • 每個方法都有一個與之對應的SEL類型的對象
  • 根據一個SEL對象就可以找到方法的地址,進而調用方法
  • SEL類型的定義
typedef struct objc_selector     *SEL;

2.SEL對象的建立

SEL s = @selector(test);SEL s2 = NSSelectorFromString(@"test");

3.SEL對象的其他用法

// 將SEL對象轉為NSString對象NSString *str = NSStringFromSelector(@selector(test));Person *p = [Person new];// 調用對象p的test方法[p performSelector:@selector(test)];

OC中的點文法 是Xcode的特性,Xcode幫我們做代碼替換

// Xcode會幫我們把下面的代碼替換成[person setAge:18];person.age = 18;// Xcode會幫我們把下面的代碼替換成[person age];int a = person.age;

@property 和 @synthesize

@property 編譯器指令,編譯器幫我們會進行_age _name get/set方法的聲明

@synthesize幫我們實現了 執行個體變數的get和set方法

Xcode4.4之後@property既可以幫我進行_age _name get/set方法的聲明,也可以實現執行個體變數的get和set方法

@property (nonatomic, assign) int age;@property (nonatomic, copy) NSString *name;

id是萬能指標,可以指向任何對象

OC中的構造方法

重寫構造方法,讓對象建立成功後,就有初始的值

OC中給對象進行初始化的方法是:init對象方法  該方法返回的是一個對象(調用init方法的對象)

// 當子類把父類的init覆蓋了,這是預設的先執行子類的- (instancetype)init{    //先讓父類把父類原來做的事情做完    self = [super init];        //判斷父類是否初始化成功    if (self) {                //此處寫子類初始化的內容        _age = 18;  //給年齡設定為預設值 18歲            }        return self; //self指代的事方法的調用者}

自訂構造方法

.h檔案代碼如下

#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic, copy) NSString* name;@property (nonatomic, assign) int age;// 自訂構造方法- (instancetype)initWithName:(NSString *)name andAge:(int)age;@end

.m檔案代碼如下

#import "Person.h"@implementation Person- (instancetype)initWithName:(NSString *)name andAge:(int)age{    if (self = [super init]) {        _name = name;        _age = age;    }    return self;}@end

 

Objective-C知識總結(2)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.