從零開始: Object-C 學習3-類(方法與屬性)

//
//  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表示程序正常結束
}
相關文章
相關標籤/搜索