对象初始化:
-(id)init;万能类型,能返回各种对象,可能会导致类型错误。
-(instancetype)init;当前类的类型(推荐大家选)
if的判断语句中self是等于[super init]而不是判断,初始化失败的话就返回空 ,这时返回0给self自己,自己就变成空对象。
指定初始化方法
一般是参数最多的一种初始化方法:
其他初始化都直接间接调用指定初始化,出现错误以后可以直接从指定初始化中找出错误。
一个类需要一个指定初始化方法。
存取器方法:
get的方法和实例变量同名。
set是设置的方法,方法名命的格式set实例变量名。
有了存取器的方法,可以使用点语法,两种方法等价。
[实例变量名 name] 或者 实例变量名. name。
点语法是为了减少程序员编写的时间,本质不变。
设置了了set方法以后,也可以用点语法。
只有get和set方法能点语法。其他语法只能用[]
属性声明
›
点H文件中
@poroperty(nonatomic,retain)NSString* name...
点M文件中synthesize name....
在synthesize age_oldage,这样就可以在main文件中直接用oldage = 10;但是self.age只能这么用,两者等同于[self setoldage:10];
@poroperty()括号中的词
线程相关的
1、原子性 atomic (默认)(一般使用这个)
2、非原子性 nonatomic
读/写
1、readonly只产生getter方法,不生成setter的方法
2、readwirte (默认)都会产生读取和设置的方法
在获取和设置方法中,可以用getter和setter设置得到和设置的设置名:
@property(nonatomic,getter = getNo,setter = setNo:)NSString* sid
[zhang setNo:@"111"]
得到他的值的
zhang.getNo
4.6版本以后
可以不声明实例变量,只声明属性,声明属性后会自动声明实例变量
seif和super
把具体实例方法绑定到对象的是self
内存管理规则