天天看點

IOS 類和方法

1、類和方法

下圖中是一段的類聲明的文法展示,聲明了一個叫做 MyClass 的類,它繼承于根類:NSObject。(根類可以被所有的其他類直接或間接繼承。)

IOS 類和方法

下圖是一個方法的文法展示,方法的聲明由以下幾個部分構成:方法類型辨別符,傳回類型,一個或多個方法簽名關鍵字,以及參數類型和名稱。

IOS 類和方法

2、建立類

1.1、建立Single View app 模版項目,按Command + N 建立檔案,建立類Student ,繼承與NSObject

IOS 類和方法

1.2、生成student.h  和student.m

  1. #import <Foundation/Foundation.h>  
  2. @interface Student : NSObject  
  3. @end  
  1. #import "Student.h"  
  2. @implementation Student  
  3. @end  

1.3、在頭檔案裡添加類成員變量和方法

@interface

  1. #import <Foundation/Foundation.h>  
  2. @interface Student : NSObject  
  3. {  
  4.     NSString *studentName;  
  5.     NSInteger age;  
  6. }  
  7. -(void) printInfo;  
  8. -(void) setStudentName: (NSString*) name;  
  9. -(void) setAge: (NSInteger) age;  
  10. -(NSString*) studentName;  
  11. -(NSInteger) age;  
  12. @end  
  • @interface 類的開始的辨別符号 ,好比Java  或 C 語言中的Class   
  • @end 類的結束符号
  • 繼承類的方式:Class:Parent,如上代碼Student:NSObject
  • 成員變量在@interface Class: Parent { .... }之間
  • 成員變量預設的通路權限是protected。
  • 類成員方法在成員變量後面,格式是:: scope (returnType) methodName: (parameter1Type) parameter1Name;
  • scope指得是類方法或執行個體化方法。類方法用+号開始,執行個體化方法用 -号開始。

1.4、實作類中的方法

@implementation

  1. #import "Student.h"  
  2. @implementation Student  
  3. -(void) printInfo  
  4. {  
  5.     NSLog(@"姓名:%@ 年齡:%d歲",studentName,studentAge);  
  6. }  
  7. -(void) setStudentName: (NSString*) name  
  8. {  
  9.     studentName = name;  
  10. }  
  11. -(void) setAge: (NSInteger) age  
  12. {  
  13.     studentAge = age;  
  14. }  
  15. -(NSString*) studentName  
  16. {  
  17.     return studentName;  
  18. }  
  19. -(NSInteger) age  
  20. {  
  21.     return studentAge;  
  22. }  
  23. @end  

1.5、在View中建立類對象,調用方法。

  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];      
  4.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  5.     Student *student = [[Student alloc]init];  
  6.     [student setStudentName:@"張三"];  
  7.     [student setAge:10];  
  8.     [student printInfo];  
  9.     [pool release];  
  10. }  
  • Sutdent *student = [[Sutdent alloc] init]; 這行代碼含有幾個重要含義
  •  [Student alloc]調用Student的類方法,這類似于配置設定記憶體,
  •  [object init]是構成函數調用,初始類對象的成員變量。

列印結果:

  1. 姓名:張三 年齡:10歲  

2、類的執行個體方法使用多個參數

2.1添加一個多參數的方法和實作

  1. ....  
  2. -(void) setNameAndAge:(NSString*) name setAge:(NSInteger) age;  
  3. ....  
  1. ....  
  2. -(void) setNameAndAge:(NSString*) name setAge:(NSInteger) age  
  3. {  
  4.     studentName = name;  
  5.     studentAge = age;  
  6. }  
  7. ....  

2.2調用

  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];      
  4.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  5.     Student *student = [[Student alloc]init];  
  6.     [student setNameAndAge:@"李四" setAge:20];  
  7.     [student printInfo];  
  8.     [student release];  
  9.     [pool release];  
  10. }  

列印結果:

  1. 姓名:李四 年齡:20歲  

3、自定義構造函數

3.1聲明和實作構造函數

  1. ....  
  2. -(Student*) initWithNameAndAge:(NSString*) name setAge:(NSInteger) age;  
  3. ....  
  1. ....  
  2. -(Student*) initWithNameAndAge:(NSString*) name setAge:(NSInteger) age  
  3. {  
  4.     self = [super init];  
  5.     if ( self ) {  
  6.         [self setNameAndAge:name setAge:age];  
  7.     }  
  8.     return self;  
  9. }  
  10. ....  

-(id)init 這個方法用于類的初始化建立,每一個類在建立的時候需要調用init方法,使用父類的init 方法得到了self,這就可以做一些子類初始化的工作

3.2使用自定義構造函數:

  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];      
  4.     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  5.     Student *student = [[Student alloc]initWithNameAndAge:@"rongfzh" setAge:6];  
  6.     [student printInfo];  
  7.     [student release];  
  8.     [pool release];  
  9. }