1.创建对象
2.定义对象 --指针 Person *per
3.分配空间[Person alloc]
4.[对象 方法]给对象发送‘方法’消息
总和:Person *per = [[Person alloc]init]; 初始化 ,给per对象发送初始化消息,让它去初始化自己
注意:OC中的字符串可以直接赋值 例如:per ->name = @"虾米";
可以利用->访问类的实例变量
定义 :便利构造器:
-( id) 代表对象方法 只能给对象发送这个消息;
eg:
-(instancetype)initWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
+(id) 代表类的方法 只能给类发送这个消息;
eg:
+(instancetype)personWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
便利构造器的方法,以类名开头,且类名首字母小写;
单独初始化一个属性时,代码如下:
-(instancetype)initWithName:(NSString *)name;
方法实现如下:
-(instancetype)initWithName:(NSString *)name{
return [selfinitWithName:nameage:0height:0];
}
便利构造器初始方法如下:
+(instancetype)personWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height;
实现方法如下:
+(instancetype)personWithName:(NSString *)name age:(NSInteger)age height:(CGFloat)height{
Person *person = [[Personalloc]initWithName:nameage:ageheight:height];
return person;
}
点运算复述:利用点运算访问其对应的属性
使用点运算,其实就是调用了setter和getter方法
使用点运算访问值使用的是getter
使用点运算设置值使用的是setter
使用特征属性处理属性的细微操作:
1.读写性特征: 可读可写:read write :产生set和get方法(默认的)只读:readonly只产生get方法
2.原子性特征: 原子性:atomic:在多线程程序下访问设置是安全的(默认的)
当线程在访问该属性时,会给该属性加线程锁,加锁之后其他线程不可以再访问和设置
当线程访问结束时解锁: 效率非常低的
非原子性:nonatomic 多线程不安全,没有线程管理机制一般使用这种,效率比较高
3.语义型特征: assign:用来修饰普通数据类型,不进行特殊的内存管理(默认的)
retain:用来修饰对象,对属性进行内存管理
copy:复制一份副本
加特征的格式
特征中,每一大特征都必须有
多个特征之间用逗号隔开
@property (特征)属性类型属性名称该方法在.h文件中属性定义
可以多个属性写在一起,多个属性时用逗号隔开
与@synthesize结合使用,实例变量的类型和属性类型一致
@property NSString *name =实例变量名称;
自动产生一个实例变量,私有实例变量,且只有当前文件可以看到;
如果省略@synthesize不可以同时重写setter和 getter方法
如果要重写setter 和 getter方法,就不要省略@synthesize
@synthesize属性名称该文件在.m文件中属性接收
@synthesize name = _name;
下章我将会上传OC最重要的知识点,希望大家多多提意见