您的位置:首页 > 移动开发 > Objective-C

Objective-c - setter/getter方法的自动生成:(Xcode4.4版本之前)

2016-12-29 16:57 591 查看
/*

 Objective-c - setter/getter方法的自动生成:

 

 大前提:Xcode在4.4版本之前@property,@synthesize的用法和使用注意:

    @property:(写在@interface中)

        1> 作用

            自动生成setter/getter方法的声明.

        2> 语法格式

            @property
数据类型 数据名称.

        3> 工作原理

            编译器在编译的时候会自动的生成setter方法的声明:- (void)set首字母大写的数据名称:(数据类型)数据名称;

                            
自动的生成getter方法的声明:- (数据类型)数据名称;

        4>使用注意

            1, @property的数据类型和数据名称要和属性一致,属性的数据名称不带下划线;

            2, @property的数据类型相同的时候可以批量的声明,数据类型不同是不可以批量声明的;

 

 

    @synthesize:(写在@implementation中)

        1> 作用

            自动生成setter/getter方法的实现.

        2> 语法格式

            @property
数据名称.

        3> 工作原理

            1, 编译器在编译的时候会自动的生成一个与@property相对应的真私有属性,即声明在@implementation中的.

            2, 自动生成setter方法的实现,在方法的内部直接将参数赋值给了它自动生成的真私有属性.

            3, 自动生成getter方法的实现,在方法的内部直接返回它自动生成的真私有属性的值.

 

    如下代码:

             @interface YYPerson : NSObject

             {

                NSString *_name;

             }

             @property NSString *name;

             @end

 

             @implementation YYPerson

             

             @synthesize name;

             

             @end

 

    等价于:

             @interface YYPerson : NSObject

             {

                NSString *_name;

             }

             - (void)setName:(NSString *)name;

             - (NSString *)name;

             @end

 

             @implementation YYPerson

             {

                NSString *name;

             }

             - (void)setName:(NSString *)name

             {

                self->name = name;

             }

             - (NSString *)name

             {

                return self->name;

             }

             @end

 

        4> 使用注意

            1, 因为@synthesize自动生成了一个与@property相对应的不带下划线的真私有属性,而使得在@interface中声明的的带下划线

             的属性显得多余,因此可以将@interface中声明的的带下划线的属性注释掉;

            但@synthesize自动生成的不带下划线的真私有属性又很不规范,所以@synthesize的时候使用以下格式:

                @synthesize @property名称 =
定义在@interface中的带下划线的属性名,即: @synthesize name = _name;

 

            这样写的意义:

                1,@synthesize不会自动生成私有属性;

                2,自动生成setter方法的实现,在方法的内部直接将参数的值赋值给后面指定的属性.

                3,自动生成getter方法的实现,在方法的内部直接返回后面指定的属性的值.

    此时代码如下:

             @implementation YYPerson

             

             @synthesize name = _name;

             

             @end

 

    等价于:

             @implementation YYPerson

             {

                NSString *name;

             }

             - (void)setName:(NSString *)name

             {

                _name = name;

             }

             - (NSString *)name

             {

                return _name;

             }

             @end

                

            2, @synthesize生成的setter方法的实现,没有逻辑判断,是直接赋值或返回的.

                    如果需要逻辑判断,则需要重写setter方法.

 

            3, @synthesize也可以批量生命,数据类型不同也可以批量声明.

 */

#import <Foundation/Foundation.h>

int main(int argc,
const char * argv[]) {

    @autoreleasepool {

        // insert code here...

        NSLog(@"Hello, World!");

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐