// // 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表示程序正常结束 }