- 创建对象
Objective-C创建对象需通过alloc以及init两个消息。alloc的作用就是分配内存,init则是初始化对象。init和alloc都是定义在NSObject里的方法,父对象收到这两个消息并做出正确回应后,新对象才创建完毕。
MyObject *my = [[MyObject alloc]init];
//Objective-C 2.0中,若创建对象不需要参数,则可以直接使用new
MyObject *my = [MyObject new];
- 实例方法和类方法
@interface MyObject : NSObject{
int memberVar1;//实体变量
int memberVar2;
}
+ (NSString*) class_method;//类方法
- (void) instance_method1;//实例方法
- (void) instance_method2:(int)p1;
- (void) instance_method3:(int)p1 anPar:(int)p2;
@end
//方法前面的 +/- 号代表函数的类型:加号(+)代表类方法(class method),不需要实例就可以调用,与C++ 的静态函数(static member function)相似。减号(-)即是一般的实例方法(instance method)
/*
对象方法
1> 减号 - 开头
2> 只能由对象来调用
3> 对象方法中能访问当前对象的成员变量(实例变量)
类方法
1> 加号 + 开头
2> 只能由类(名)来调用
3> 类方法中不能访问成员变量(实例变量)
类方法的好处和使用场合
1> 不依赖于对象,执行效率高
2> 能用类方法,尽量用类方法
3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法
可以允许类方法和对象方法同名
*/
> 1.实例方法里面的self,是对象的首地址
> 2.类方法里面的self,是class
- 属性
属性是用来代替声明存取方法的便捷方式。属性不会在你的类声明中创建一个新的实例变量。他们仅仅是定义方法访问已有的实例变量的速记方式而已。
属性的访问方法由@synthesizer关键字来实现,他由属性的声明自动地产生一对访问方法。另外,也可以选择使用@dynamic关键字表明访问方法会由程序员手工提供。
@property声明了一些成员变量的访问方法;
@synthesize则定义了由property声明的方法
对应关系是:
property 声明方法 -->头文件中申明getter和setter方法;
synthesize定义方法 --> m文件中实现getter和setter方法。
@property 和 @synthesize在Xcode4.4以前一直都是配合着使用,在4.4以后,@property得到了增强,一行代码编译器就会自动帮我们生成setter和 getter方法的声明和实现,以及成员变量的声明。同时在.m文件中声明一个和属性名一样并且在最前面带有下划线的成员变量 (private)。
使用@synthesize 只有一个目的,给实例变量起个别名,或者说为同一个变量添加两个名字。
如果要阻止自动合成,记得使用 @dynamic
@property (nonatomic, assign) NSInteger age;
当我们同时重写了setter and getter方式时,系统会报错,原因是找不到_age这个变量
解决办法:
> 方案一:在.h的文件中声明这个属性
Person.h
@interface Person : NSObject {
NSInteger _age;
}
@property NSInteger age;
@end;
> 方案二:在.m的文件中使用@synthesize
@implementation Person
@synthesize age = _age;
//_age是成员变量;age是属性;最后操纵的都是成员变量
- (void)setAge:(NSInteger)age {
_age = age;
}
- (NSInteger)age {
return _age;
}
总结:
- @synthesize的作用:是为属性添加一个实例变量名,或者说别名。同时会为该属性生成setter/getter方法。
禁止@synthesize:如果某属性已经在某处实现了自己的setter/getter,可以使用@dynamic来阻止@synthesize自动生成新的setter/getter覆盖。
内存管理:@synthesize和ARC无关
一般情况下无需对属性添加@synthesize,但一些特殊情况仍然需要,如protocol中声明的属性。
tips:参考出处
http://blog.youkuaiyun.com/shuai265/article/details/75024275
https://www.jianshu.com/p/bcf734db475c