20140927个人日志(属性变量释放问题,)

         下午过来公司继续看项目代码,解决了困惑我已久的问题。

         写OC代码也有几个月了,平时使用属性变量的时候也就那么用,并没有细细思考,该什么时候释放总是拿不准时机。比如有下面的例子

         先声明一个属性变量如下:

          @property(nonatomic, retain) NSString *str1;
再创建一个对象并初始化为 str1

          NSString *tempStr = str1;

之后如果不用 tempStr 对象,无需释放  tempStr(假定所有需要的对象都已经初始化完毕)。但是如果是

          str1 = tempStr;
则需要对 str1 进行释放,即使没有alloc也得释放。原因属性的set方法和get方法不一样。set方法如下:

          - (void)setStr:(NSString *) str1
<span style="white-space:pre">	</span>  {
           //请注意以下不能使 用self.操作
  <span style="white-space:pre">	</span>      [str release];
    <span style="white-space:pre">	</span>      str = nil;
   <span style="white-space:pre">	</span>      str = [<span style="font-family: Arial, Helvetica, sans-serif;">str1</span> retain];
<span style="white-space:pre">	</span>  }

也有下面的原型

<span style="white-space:pre">	</span> -(void) setStr:(NSString *)str1
<span style="white-space:pre">	</span> {
   <span style="white-space:pre">	</span>  if (<span style="font-family: Arial, Helvetica, sans-serif;">str</span><span style="font-family: Arial, Helvetica, sans-serif;"> != str1 )</span>
    <span style="white-space:pre">	</span>  {
     <span style="white-space:pre">	</span>     [str1 retain];
      <span style="white-space:pre">	</span>     [str release];
             str = str1;
          }
<span style="white-space:pre">	</span> }

set方法会对之前的属性变量清空,并对的新的对象retain一次,为了平衡引用计数,所以后边需要释放一次;而get方法直接返回对象,不会进行retain操作,所以不需要再释放。

<span style="white-space:pre">	</span>-(NSString*) str
<span style="white-space:pre">	</span>{
 <span style="white-space:pre">	</span>   return str;
<span style="white-space:pre">	</span>}
这是今天收获的第一个点。


        第二点就是在项目中查询所有的方法时("Find In Project"),输入方法名后,却怎么也查询不到相应文字,无法定位,后来尝试在方法名后面加上冒号,结果就能搜索到了。后边仔细一看,原来是不小心更改了查询条件,修改为:

Find -> Text -> Containing 即可查询到所有出现的目标文本,以前都没注意到这一点,此处mark下。


        第三点,看到枚举类型的  NS_ENUM NS_OPTIONS ,粗略的学习了下,这个枚举跟以前 C 语言的枚举 enum  有点不一样,是带参数的枚举类型。首先来看下NS_ENUM

      typedef NS_ENUM(NSInteger, UITableViewCellStyle)<span style="font-family: Verdana;"> {  </span>
      }
      第一个参数是一个类型,用来存储这个枚举类型定义的变量,需要确保指定的内存大小能够容纳变量的值,不然会出错,第二个变量即为新定义枚举类型的类型名,花括号里面的定义同之前的enum。这个方法能指定存储单元。

      再来看看 NS_OPTIONS

<span style="white-space:pre">	</span>typedef NS_OPTIONS(NSUInteger, GDAnnotationType) {
<span style="white-space:pre">	</span>}
      也是两个参数,这个枚举类型可以作“按位与”,“按位或”运算,就是如果同时需要两种属性的话,可以考虑用这个,通常里边的常量都是依次 左移 一位的,这样才能满足按位运算的要求。










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值