黑马程序员——ios笔记整理——类的声明和实现中的注意事项
一个类完整的类包括:类名,实例变量/属性,功能/行为
声明:使用@interface @end关键字 实现:使用@implementation @end关键字
直接上代码(xcode中整理后复制),注释为需要注意的知识点:
1 主函数: 2 #import <Foundation/Foundation.h> 3 #import "Person.h" 4 int main(int argc, const char * argv[]) { 5 @autoreleasepool { 6 //声明一个实例或对象p 7 Person *p = [Person new]; 8 //[Person new]相当于[[Person alloc]init] 9 //[Person new]完成了三个步骤 10 //1.在堆区中开辟内存空间(alloc)2.初始化成员变量值(init)3.返回指针地址 此处赋值给栈区的局部变量p 11 p.age = 7; 12 //点语法的运用,相当于[p setAge:7]; 13 //int age = [p Age]; 14 NSLog(@"age = %d",p.age); 15 16 } 17 return 0; 18 } 19 20 .h声明文件: 21 22 #import <Foundation/Foundation.h> 23 24 @interface Person : NSObject{ 25 26 int _age; 27 NSString * _name; 28 29 } 30 //封装的实现步骤 31 //setter和getter方法的声明 32 //set、get方法的注意事项: 33 //注意:在.h中声明的所有方法作用域都是public类型,不能更改 34 35 -(void)setAge:(int)age; 36 -(int)age; 37 @end 38 39 .m实现文件: 40 41 #import "Person.h" 42 43 @implementation Person 44 45 //封装的 46 //setter和getter方法的实现 47 /* 48 49 set命名规范: 50 (1)方法名必须以set开头 51 (2)Set后面跟去掉下划线的成员变量的名称,首字母大写 52 (3)返回值一定是void 53 (4)一定要接收一个参数,而且参数类型需要和成员变量的类型一致 54 (5)形参名不能和成员变量名一样(苹果官方推荐成员变量名前加_以示区分) 55 get命名规范: 56 (1)一定有返回值,返回值的类型和成员变量的类型一致 (2)方法名为去掉下划线的成员变量名 (3)不需要接收任何参数 57 58 */ 59 60 -(void)setAge:(int)age{ 61 62 _age = age; 63 64 } 65 -(int)age{ 66 67 return _age; 68 69 } 70 @end 71 72 /*注意,xcode对该方法做了优化,以上的set、get方法可以直接使用@property(nonatomatic,assign) (int) age;代替,不需要在.m文件中再进行方法的实现,同时可以直接省略成员变量_age的声明,简化如下:*/ 73 .h声明文件中: 74 75 #import <Foundation/Foundation.h> 76 77 @interface Person : NSObject{ 78 79 //int _age; 80 //NSString * _name; 81 82 } 83 @property(nonatomic,assign)(int)age; 84 @property(nonatomic,copy)(NSString *)name; 85 //retain为MRC中对于类的内存管理优化 ARC中同类对象需要使用strong 86 @end
在使用@property快速创建成员变量及get、set方法时,应该注意内存管理模式,不同内存管理模式下的注意细则如下:
@property内存管理策略的选择
1.MRC手动内存管理
<1> copy : 只用于NSString\block
<2> retain : 除NSString\block以外的OC对象
<3> assign : 基本数据类型、枚举、结构体(非OC对象),当2个对象相互引用,一端用retain,一端用assign
2.ARC自动内存管理
<1> copy : 只用于NSString\block
<2> strong : 除NSString\block以外的OC对象
<3> weak : 当2个对象相互引用,一端用strong,一端用weak 4> assgin : 基本数据类型、枚举、结构体(非OC对象)
浙公网安备 33010602011771号