// // MyTest2Class.h // OCStudy_01 // // Created by guo denny on 14-11-6. // Copyright (c) 2014年 guo denny. All rights reserved. // /* 1. 類有兩種方法:實例方法(-)和類方法(+),類方法跟C++裏的靜態方法有點像,但不徹底相同。 2. 類的屬性:至關於幫咱們默認實現了擁用get和set方法的成員變量,但不限於此 */ #import <Foundation/Foundation.h> @interface MyTest2Class : NSObject { int x; //NSString *str; } -(void) print; -(NSString*) getStrParam; +(MyTest2Class*) newInstance; //屬性 這個跟Delphi裏類的定義有點像 @property int Y; @property (copy) NSString* str; //指定copy,複製已有屬性使用 這個str與上面的str不一樣 @property (readonly) int Z; //只讀 @end
// // MyTest2Class.m // OCStudy_01 // // Created by guo denny on 14-11-6. // Copyright (c) 2014年 guo denny. All rights reserved. // #import "MyTest2Class.h" @implementation MyTest2Class -(void) print { NSLog(@"str[%p]: %@",self.str, self.str); } -(NSString*) getStrParam { return self.str; } +(MyTest2Class*) newInstance { return [[MyTest2Class alloc] init]; } @end
// // main.m // OCStudy_01 // // Created by guo denny on 14-11-4. // Copyright (c) 2014年 guo denny. All rights reserved. // // 單行註釋 /*多行註釋*/ #import <Foundation/Foundation.h> //相似#include #import "MyTest2Class.h" int main(int argc, const char * argv[]) { @autoreleasepool { //自動釋放池,一種內存管理機制,也是一種引用計算的管理方式 //經過類方法建立實例 MyTest2Class * test = [MyTest2Class newInstance]; [test print]; //這時候會打印出 str: (null) //屬性:設置 獲取屬性值:默認爲增長set函數,獲取直接調用以下setY和.Y [test setStr:@"測試"]; [test setY:99]; NSLog(@"Y=%d, %d",[test Y], test.Y); //屬性還能夠經過’點‘調用 //屬性:複製使用 NSString *s = [test str]; NSLog(@"s[%p]=%@, str[%p]=%@", s, s, [test getStrParam], [test getStrParam]); //%p 輸出地址,這裏涉及copy語法問題(參考:http://www.2cto.com/kf/201402/276478.html)這裏是淺拷貝,因此二者地址是同樣的 //屬性:只讀 //test.Z = 10; 這樣是不能編譯經過的 } return 0; //和C同樣,表示main函數的終止,返回0表示程序正常結束 }