解决方案 »

  1.   

    1.NSString *a = [NSString stringwith.....] 这个函数创建出来的对象是个autorelease 的, 所以不需要你在使用完后再release。 而initWithString:包括其它的创建对象的方法,只要是以init开头的实例方法 retainCount都会加1 ,在使用完后都需要手动去release
    2. tmp和b 不需要手动释放 
    3. NSDictionary *a 如果在类中是一个成员变量,而没有定义成属性,这时需要你手动retain它,不然这样的对象会在某一时刻被释放回收,而导致程序异常。所以需要我们对它进行retain 操作 [a retain]. 在类的生命周期中,在类的dealloc方法中再去释放它release
    4. 函数的返回值为NSData ,对于函数返回值的内存管理是这样的。一般的我们会在函数返回的时候,返回一个autorelease的对象(前提是这个对象是自己可管理的,实例的retaincount 为1的,如果本身就是一个autorelease对象可直接返回),这样外部在调用这个函数的时候就不用担心内存管理的问题。因为这个对象被加入到了autoreleasePool(自动释放池)中。而调用它得到的对象在某种情况下还是需要使用retain 来让它驻在内存中的。
      

  2.   

    ios6 NSString 不需要释放。