zoukankan      html  css  js  c++  java
  • assign, copy, retain 仔细看看怎么回事

    用@property不就完了么,为啥要自己写Getter和Setter?

    有些时候需要在getter和setter方法中加入些特别的操作。

    最简单的getter和setter

    - (SomeVariable)someValue
    {
        return someValue;
    }
    - (void)setSomeValue:(SomeVariable)aSomeVariableValue
    {
        someValue = aSomeVariableValue;
    }

    如果我们把nonatomic, assign的property展开,就能得到以上的getter和setter。

    @property (nonatomic, assign) SomeVariable someValue;

    以上对于primitive type和其他非对象类数据结构管用。例如:基础数据类型char、int、float、long、double、或者Objective C的能被回收的对象(只在Mac上才有GC,iOS上就木有了)

    那要是展开个retain的property,那getter和setter会是啥样子呢

    - (void)setSomeInstance:(SomeClass *)aSomeInstanceValue
    {
        if (someInstance == aSomeInstanceValue)
        {
            return;
        }
        SomeClass *oldValue = someInstance;
        someInstance = [aSomeInstanceValue retain];
        [oldValue release];
    }

    最后那段代码好绕啊,写成这样不就好了嘛?

    - (void)setSomeInstance:(SomeClass *)aSomeInstanceValue
    {
        [someInstance release];
        someInstance = [aSomeInstanceValue retain];
    }

    上面的代码的第一个release会在retain之前就把对象给销毁了。

    那写个setter这么麻烦,有木有简单点的语法?有,如下:

    - (void)setSomeInstance:(SomeClass *)aSomeInstanceValue
    {
        [someInstance autorelease];
        someInstance = [aSomeInstanceValue retain];
    }

     转载自:http://blog.csdn.net/alexjames_83/article/details/7528856

  • 相关阅读:
    第十一周编程总结
    第十周编程总结
    第九周
    第八周
    第七周编程总结
    第六周编程总结
    学期总结
    第十四周课程总结&实验报告(简单记事本的实现)
    第十三周课程总结
    第十二周课程总结
  • 原文地址:https://www.cnblogs.com/xuanyuanchen/p/2561095.html
Copyright © 2011-2022 走看看