从零开始: 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表示程序正常结束
}


你可能感兴趣的:(从零开始: Object-C 学习3-类(方法与属性))