美文网首页
Ovjective-c之@property @synthesiz

Ovjective-c之@property @synthesiz

作者: Smallwolf_JS | 来源:发表于2019-01-17 17:54 被阅读8次

    属性?成员变量?实例变量?
    @property声明的是属性
    写在大括号里面的是成员变量
    除了基本数据类型以外的是实例变量

    @property经常与@synthesize@dynamicy搭配使用
    @synthesize:在Xcode4.5以前,除了定义一个属性之外,还必须在.m文件中加上@synthesize name=_name,编译器会在编译时为我们生成settergetter方法,Xcode4.5以及4.5以后不用加这个,编译器也会为我们生成。
    @dynamicy:告诉编译器不要帮我们生成setter和getter方法,自己手动实现,如果没有手动实现,但是用了self.属性,程序会崩溃

    @property修饰符

    1. 线程安全类的:

    atomic(默认):
    原子属性,默认是线程安全的,但是只是对于属性 的存取来说,而且并不总是线程安全:当A线程正在修改这个属性,其他线程的读写操作会陷入等待,A线程写完后B线程开始写,那么当A再读得时候就会读到B的值,而且,要是有一个C线程不小心把这个属性销毁了,那么A再去访问,程序会崩溃,所以还是要用lock来保证线程安全
    性能不好
    只对setter方法加锁
    nonatomic
    非原子属性,线程不安全,支持多线程访问,效率高,一般使用这个

    2. 访问权限(决定生成getter还是setter方法)

    readwrite:可读可写,生成Setter和getter方法
    readOnly:只允许读,只生成getter方法

    3. 内存管理类

    MRC下
    assign:解决循环引用
    retain:对象的引用计数加1
    copy:适用于NSString,NSArray,NSDictionary,会复制一份对象的内容,防止在对象在不小心更改以后影响我们原来的值。
    ARC

    • strong:强引用,相当于MRC下的assign,只要有一个强引用指向一个对象,这个对象就不会被销毁
    • weak:解决循环引用,相当于MRC下的assign,区别是会在对象被销毁后,把对象置为nil
    • assign:基本数据类型
    • copy:同MRC

    修饰符辨别
    weakassign:都可以解决循环引用,但是weak会在对象被销毁后置为nil
    copystrong:strong是浅拷贝,拷贝一个指针指向原来的对象,与原来对象指向同一块内存;copy是浅拷贝:拷贝了原来对象的副本,内容之间不会相互影响,但是要注意,如果copy后得到的对象和被copy的对象都是NSString,也就是不可变,那么为了内存优化,不会产生新的副本。

    相关文章

      网友评论

          本文标题:Ovjective-c之@property @synthesiz

          本文链接:https://www.haomeiwen.com/subject/ogtwdqtx.html