zoukankan      html  css  js  c++  java
  • IOS开发self.的用法总结

    如果声明的是retain类型的,然后使用self.的话此时引用计数会加1,变成1,如果同时又使用了alloc,那么引用计数又加一变成了2,那么如果只是release一次的话就会内存泄漏。

    这种情况下的处理是如果同时使用了alloc等控制权处理那么不要使用self.了,直接用变量名字即可。

    以下是我的一些总结,如果有不对的地方希望大家多多指教

    我们在官方文档里看到这样的代码:

    在MyClass.h文件中

    @interface MyClass : NSObject {  MyObject *myObject; }
    @property (nonatomic, retain) MyObject *myObject;
    @end

    在MyClass.m文件中

    @synthesize myObject;
    -(id)init{
    if(self = [super init]){
    MyObject * aMyObject = [[MyObject alloc] init];
    self.myObject = aMyObject;
    [aMyObject release];
    }
    return self;
    }

    为什么要用之上的赋值方法呢?难道self.myObject = [[MyObject alloc] init]; 或者 myObject = [[MyObject alloc] init]; 不可以吗;不要以讹传讹,以下是我的一些见解。


    第一种:当加上self.的时候..................................

    MyObject * aMyObject = [[MyObject alloc] init];             //aMyObject retainCount = 1;
    self.myObject = aMyObject;                                          //myObject retainCount = 2;
    [aMyObject release];                                                    //myObject retainCount = 1;

    第二种:当不加self.的时候
    MyObject * aMyObject = [[MyObject alloc] init];           //aMyObject retainCount = 1;
    myObject = aMyObject;                                               //myObject retainCount = 1;
    [aMyObject release];                                                   //myObject被释放;

  • 相关阅读:
    java字符串的遍历以及字符串中各类字符的统计
    Java Jvm运行机制原理
    为什么面试要问 hashmap 的原理
    HashMap的实现原理
    redis两种持久化方式的优缺点
    2018No-java面试知识
    从架构演进的角度聊聊spring cloud都做了些什么?
    MySQL索引优化
    2018java面试知识汇总
    多线程—7种同步方法
  • 原文地址:https://www.cnblogs.com/lisa090818/p/3209064.html
Copyright © 2011-2022 走看看