1、類和方法
下圖中是一段的類聲明的文法展示,聲明了一個叫做 MyClass 的類,它繼承于根類:NSObject。(根類可以被所有的其他類直接或間接繼承。)
下圖是一個方法的文法展示,方法的聲明由以下幾個部分構成:方法類型辨別符,傳回類型,一個或多個方法簽名關鍵字,以及參數類型和名稱。
2、建立類
1.1、建立Single View app 模版項目,按Command + N 建立檔案,建立類Student ,繼承與NSObject
1.2、生成student.h 和student.m
- #import <Foundation/Foundation.h>
- @interface Student : NSObject
- @end
- #import "Student.h"
- @implementation Student
- @end
1.3、在頭檔案裡添加類成員變量和方法
@interface
- #import <Foundation/Foundation.h>
- @interface Student : NSObject
- {
- NSString *studentName;
- NSInteger age;
- }
- -(void) printInfo;
- -(void) setStudentName: (NSString*) name;
- -(void) setAge: (NSInteger) age;
- -(NSString*) studentName;
- -(NSInteger) age;
- @end
- @interface 類的開始的辨別符号 ,好比Java 或 C 語言中的Class
- @end 類的結束符号
- 繼承類的方式:Class:Parent,如上代碼Student:NSObject
- 成員變量在@interface Class: Parent { .... }之間
- 成員變量預設的通路權限是protected。
- 類成員方法在成員變量後面,格式是:: scope (returnType) methodName: (parameter1Type) parameter1Name;
- scope指得是類方法或執行個體化方法。類方法用+号開始,執行個體化方法用 -号開始。
1.4、實作類中的方法
@implementation
- #import "Student.h"
- @implementation Student
- -(void) printInfo
- {
- NSLog(@"姓名:%@ 年齡:%d歲",studentName,studentAge);
- }
- -(void) setStudentName: (NSString*) name
- {
- studentName = name;
- }
- -(void) setAge: (NSInteger) age
- {
- studentAge = age;
- }
- -(NSString*) studentName
- {
- return studentName;
- }
- -(NSInteger) age
- {
- return studentAge;
- }
- @end
1.5、在View中建立類對象,調用方法。
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- Student *student = [[Student alloc]init];
- [student setStudentName:@"張三"];
- [student setAge:10];
- [student printInfo];
- [pool release];
- }
- Sutdent *student = [[Sutdent alloc] init]; 這行代碼含有幾個重要含義
- [Student alloc]調用Student的類方法,這類似于配置設定記憶體,
- [object init]是構成函數調用,初始類對象的成員變量。
列印結果:
- 姓名:張三 年齡:10歲
2、類的執行個體方法使用多個參數
2.1添加一個多參數的方法和實作
- ....
- -(void) setNameAndAge:(NSString*) name setAge:(NSInteger) age;
- ....
- ....
- -(void) setNameAndAge:(NSString*) name setAge:(NSInteger) age
- {
- studentName = name;
- studentAge = age;
- }
- ....
2.2調用
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- Student *student = [[Student alloc]init];
- [student setNameAndAge:@"李四" setAge:20];
- [student printInfo];
- [student release];
- [pool release];
- }
列印結果:
- 姓名:李四 年齡:20歲
3、自定義構造函數
3.1聲明和實作構造函數
- ....
- -(Student*) initWithNameAndAge:(NSString*) name setAge:(NSInteger) age;
- ....
- ....
- -(Student*) initWithNameAndAge:(NSString*) name setAge:(NSInteger) age
- {
- self = [super init];
- if ( self ) {
- [self setNameAndAge:name setAge:age];
- }
- return self;
- }
- ....
-(id)init 這個方法用于類的初始化建立,每一個類在建立的時候需要調用init方法,使用父類的init 方法得到了self,這就可以做一些子類初始化的工作
3.2使用自定義構造函數:
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- Student *student = [[Student alloc]initWithNameAndAge:@"rongfzh" setAge:6];
- [student printInfo];
- [student release];
- [pool release];
- }