iOS 类成员定义方式

之前和同事讨论代码规范时提到代码中类成员的定义方式问题,发现这块的知识不是特别清晰,现在有时间整理一下,写给自己加强一下记忆。


先看代码:

//  SampleClass.h

//  storyBroadJump

//

//  Created by wlq on 15/12/17.

//  Copyright © 2015 wlq. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface SampleClass : NSObject

{

    NSString *_name;

    NSString *_sex;

}

@property(nonatomic,retain)NSString *age;

@property(nonatomic,retain)NSString *sex;

- (void)test;

@end



//

//  SampleClass.m

//  storyBroadJump

//

//  Created by wlq on 15/12/17.

//  Copyright © 2015 wlq. All rights reserved.

//


#import "SampleClass.h"


@implementation SampleClass

@synthesize sex = _sex;

- (void)test

{


    self->_name = @"2";

    _name = @"3";

//    self.name = @"4";

    


    _age = @"20";

    self->_age = @"30";

    self.age = @"30";

    


    _sex = @"female";

    self.sex = @"male";

    self->_sex = @"female";

    

    

}


- (void)setAge:(NSString *)age

{

    //ARC

    _age = age;

    

    //MRC

//    if (_age != age) {

//        [_age release];

//        _age = [age retain];

//    }

}

@end

ObjC中推荐变量名以_开头。

头文件中定义了_name, _sex 和age 三个成员但是定义方式略有不同。_name只是包含在大括号中,_sex 是在大括号中定义并且@property @synthesize声明,而age仅仅在@property 声明。


在test 方法中用self.name 方式为name负值,编译器会报错,因为self.的方式的本质还是调用对应的方法,由于没有为_name声明 

@property所以编译器报错。


声明 @property后编译器会为对应的成员生成getter 和setter 方法,当然程序员可以自己重现getter 和setter 方法以进行一些复杂处理。


sex 和age 在test方法中的使用完全一致而且_age 也可以使用,说明声明 @property 后相当于编译器添加了一个_age 到class中。


不同的程序员可能会习惯于不同的方式,这个影响不大,但是在项目中最好达成一致。


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值