• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

objective-c在Xcode中@property相关参数的解释

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

objective-c在其对象拥有成员变量时,我们为了保持代码的封装,会将成员变量设置为@protected,并为成员变量编写setter和getter方法。

如:

@interface Person : NSObject
{
    @protected
    int _age;
}
- (int)get;
- (void)setAge:(int)age;
@end

@implementation Person
- (int)get
{
    return _age;
}
- (void)setAge:(int)age
{
    _age = age;
}
@end

在Xcode中,为了让我们摆脱这种枯燥的格式化代码,增加了@property属性设置,使用@property属性,编译器会自动帮我们实现这些代码,

如:

@interface Person : NSObject
@property int age;
@end

@implementation Person
@end

这段代码经过编译器编译后与上面的代码完全相同。

但是,在实际应用中,内存管理,多线程,成员变量是否只读等等需求很多,所以@property为我们提供了很多参数来实现这些不同的需求,如下:

1.内存管理相关:

*retain:release旧值,retain新值(适用于对象类型的成员变量)

*assign:直接赋值(默认参数,适用于基本数据类型的成员变量)

*copy: release旧值,copy新值

注:关于内存管理,请阅读http://www.cnblogs.com/yoran-yang/p/4293546.html

以retain为例:

@interface Person : NSObject
@property (retain) Book *book;
@end

等同于:

@interface Person : NSObject
{
    @protected
    Book *_book;
}
- (Book *)get;
- (void)setBook:(Book *)book;
@end

@implementation Person
- (Book *)get
{
    return _book;
}
- (void)setBook:(Book *)book
{
    if(book != _book)
    {
        [book release];
        _book = [book retain];
    }
}
@end

2.读写控制相关

*readwrite:同时生成getter与setter的声明和实现(默认参数)

*readonly:只生成getter方法

3.多线程相关

*nonatomic:禁止多线程,变量保护,提高性能,读写成员变量的操作效率可以提高数倍(强烈建议在非多线程环境的程序加上此参数)

*atomic:线程安全的,性能低(默认参数为线程安全的,即加线程锁)

4.setter和getter方法的名称

*getter =(getter的方法名)

*setter =(setter的方法名)注意:此方法名必须加上后面的“:”。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Objective-c数组以及字符串的拼接和分割发布时间:2022-07-18
下一篇:
[Objective-c基础-1.3]OC带返回值的类方法发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap