---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、
<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! -----------------------
初始化 - 属性 - 类别:总结篇
OC初始化方法这个概念跟java的构造方法是一样的,都是用来创建对象同时给成员变量初始化的。对于这个我们太多要讲的,不过我得说下OC对初始化方法得命名规范要求很严格,如果没有按照它的形式命名,会报错:cannot assign to 'self' outside of a method in the init family,如果遇到这样得问题说明你们的方法名写错了,一定要按照格式写:initXxx:...,init后面第一字母一定要大写。下面给一个例子
- (id) initWithAge: (int) age andWeight: (double) weight
{
if(self = [superinit])
{
self.age = age;
self.weight = weight;
}
return self;
}
@property (copy,nonatomic)NSString *name;
1、内存管理 ,retain(set方法里面的内存管理,OC对象类型) 和assign (set方法直接赋值 ,也就是默认的情况,非 OC对象类型),还有一个copy(retain差不多)
2、是否生成set方法:readonly(只读),readwrite(可读可写,默认)
3、多线程管理:nonatomic(性能高) atomic(性能低 默认)
4、setter和getter方法的命名,一般用BOOL类型的变量
对于OC的类别,开始学的时候还觉得听新颖的,为一个添加新的方法。格式虽然和类的定义差不多,但是使用起来却是很灵活。形如:
@interface Student (Sport)
- (void) run;
@end
类别中只能添加方法,不能添加成员变量,而且在存在与原类同名的方法时它会覆盖原先的方法。它优势:1、将类的实现代码分散道不同的文件中 2、私有方法的前向引用 3、非正式协议。对于类别有一种特殊的无名字的类别,我们称之为类的扩展,类扩展可以定义变量和方法,如:
@interface Student ()
{
Sex sex; // 有些人看不出性别,嘻嘻
}
- (void) run;
@end
不过它的变量和方法都是私有的,自能在当前使用。还有类扩展中也可以使用属性特性,不过属性一定可读写的(readwrite)。对于类别还是多用,现在我的体会也不是很多,对于非正式协议的实现在下次的有委托方法的博客中给出。
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、
<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! -----------------------