黑马程序员——OC学习——@property和构造方法

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1. 传统get和set方法

set方法命名规范

方法名必须以set开头,是一个对象方法

set后面跟去掉下划线,首字母大写的成员变量名

返回值一定是void

必须有一个参数,参数类型类实例变量类型一致

形参名和成员变量名一般不一致

在set方法中一定要给成员变量赋值

get方法命名规范

一定有返回值,返回值类型和成员变量名一样

方法名和去掉下划线的实例变量名一样

不需要接受任何参数

是一个对象方法

返回值一定是实例变量值


2. 点语法

点语法是Xcode的特性,Xcode帮我们做代码替换,点语法并不是直接访问成员变量,实际是set和get方法的调用,使用时必须存在get和set方法

点语法的使用:p.age=18;  p.name=@"xxxx";

点语法使用陷阱如下,在点语法中调用self,会重复调用自身陷入死循环

-(void)setAge:(int)newAge{

        self.age=newAge;

}


3. @property关键字

@property是编译器指令,在Xcode4.4之前,@property只进行get和set方法的声明,需要手动实现或使用@synthesize关键字进行实现,在Xcode4.4之后,@property有增强功能,声明和实现set和get方法,并且操作带有下划线的实例变量,如果当前类没有下划线的实例变量,系统会帮我们生成。

@property用法

@property 类型名 方法名  eg:@property int age   //Xcode4.4之前相当于进行了age的get和set方法的声明

@property使用注意事项:只能写在@interface  @end之间


4. @synthesize关键字

@synthesize用法——@synthesize 方法名

@synthesize在.m文件中定义set和get方法的实现,使用@synthesize时方法名一定要在.h文件中使用@property进行声明

eg: @synthesize age;  //生成了一个变量age,和_age没有关系

相当于如下代码:

-(void)setAge:(int)age{
    self->age=age;
}
-(int)age{
    return age;
}


使用@synthesize指定实例变量赋值

@synthesize age=_age; //set和get方法操作的是指定的实例变量_age而不是生成的实例变量age

相当于如下代码:

-(void)setAge:(int)age{
    _age=age;
}
-(int)age{
    return _age;
}


5. @property的增强使用

@property int age;//会生成一个实例变量_age,并且实现_age的set和get方法的声明和实现,但是生成的_age是私有的,不允许子类继承和使用。

在@property增强下重写set和get方法时,只能重写一个,如果两个都重写,需要在.m文件中加上@synthesize


6. 构造方法——init

构造方法用来初始化对象,是一个对象方法。

重写构造方法的目的是为了让对象一创建出来,成员变量就有一些固定值。

new方法可以拆分为alloc 和init方法

重写构造方法的示例代码如下:

#import "Student.h"

@implementation Student
//重写构造方法使每个学生对象创建后年龄都为6岁
- (instancetype)init
{
    self = [super init];
    if (self) {
        _age=6;
    }
    return self;
}
@end

7. 自定义构造方法

自定义构造方法的规范:

一定是对象方法

返回值是id或instancetype类型

方法以initWith开头

自定义构造方法比重写构造方法更灵活,因为重写构造方法时每次初始化的值都是固定的

#import "Student.h"

@implementation Student
//自定义构造方法,使每次创建的对象用指定的值初始化
- (instancetype)initWithName:(NSString *)name andAge:(int)age
{
    self = [super init];
    if (self) {
        _name=name;
        _age=age;
    }
    return self;
}
@end

使用自定义构造方法,子类只处理自己独有的属性。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值