黑马程序员 初始化方法—属性-类别总结篇

---------------------- <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;

}

还有一点就是if条件最好这样写,[super init]这个的使用是为了实例化父类的一些信息,至于为什么要赋值给self,这个有的说法是:初始化过程中超类可能会改变一些对象,以防万一才这样写。
对于OC属性特性,是一种比较好用的针对成员变量的特性。它会对所给出的变量自动生成setter和getter方法,还可以选择性生成这些方法。属性的关键字是@property,从@我们可以直到它是一种编译器特性,在编译时生成你想要的代码。假如这样一句代码

@property (copy,nonatomic)NSString *name;

它会生成一个_name的成员变量,并且还是@private的,还给它生成相应的setter和getter方法。对于属性中括号中的参数:

  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>、期待与您交流! -----------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值