本帖最后由 u011940867 于 2013-09-16 03:34:41 编辑

解决方案 »

  1.   


    但是,如果这种时候都不报错,那么究竟是什么时候会出现 message sent to released object 这种错误呢????
      

  2.   


    关于message sent to released object 能不能举个例子呢???
      

  3.   


    关于message sent to released object 能不能举个例子呢???参考下这个,启用Enable Zombie Objects :http://blog.csdn.net/lydyangliu/article/details/9035863如果按照平时使用C/C++的逻辑来看,这种时候,程序一定会抛异常的。
    当然,良好的编程习惯,对于指针的处理,自然是进行非空的判断,用完释放及时置nullptr
      

  4.   


    关于message sent to released object 能不能举个例子呢???
    因为你的程序非常短,所以c2 dealloc后废弃的那段内存是旧值,还没有人来使用它。
    而当你的程序偏于复杂,且线程多的时候就可能出现c2 指向的内存刚刚dealloc 马上就重新被分配了,比如说这个时候c2指向的内存来了一个NSData,这个时候你去调用NSString的方法比如说stringByAppendingString 就会报错,因为NSData没有这个方法,而你以为c2指向的是NSString,错误类型是Unexcepted selector send to instance:0x1290a1这种。你用NSLog基本上不会出现错误的,因为所有的NSObject子类都可以用NSLog来输出description信息。即使没有 也会输出内存地址和类名。而且oc中没有你说的这个错误: message sent to released object 
    你是编的吧? 
      

  5.   


    关于message sent to released object 能不能举个例子呢???
    因为你的程序非常短,所以c2 dealloc后废弃的那段内存是旧值,还没有人来使用它。
    而当你的程序偏于复杂,且线程多的时候就可能出现c2 指向的内存刚刚dealloc 马上就重新被分配了,比如说这个时候c2指向的内存来了一个NSData,这个时候你去调用NSString的方法比如说stringByAppendingString 就会报错,因为NSData没有这个方法,而你以为c2指向的是NSString,错误类型是Unexcepted selector send to instance:0x1290a1这种。你用NSLog基本上不会出现错误的,因为所有的NSObject子类都可以用NSLog来输出description信息。即使没有 也会输出内存地址和类名。而且oc中没有你说的这个错误: message sent to released object 
    你是编的吧?     那个错误写错了,汗。。是message sent to dealloced object  ,(希望没有拼错),我问下,这个错误和Unexcepted selector send to instance 的区别在哪里??? 什么时候会报第一个错误???
      

  6.   


    关于message sent to released object 能不能举个例子呢???
    因为你的程序非常短,所以c2 dealloc后废弃的那段内存是旧值,还没有人来使用它。
    而当你的程序偏于复杂,且线程多的时候就可能出现c2 指向的内存刚刚dealloc 马上就重新被分配了,比如说这个时候c2指向的内存来了一个NSData,这个时候你去调用NSString的方法比如说stringByAppendingString 就会报错,因为NSData没有这个方法,而你以为c2指向的是NSString,错误类型是Unexcepted selector send to instance:0x1290a1这种。你用NSLog基本上不会出现错误的,因为所有的NSObject子类都可以用NSLog来输出description信息。即使没有 也会输出内存地址和类名。而且oc中没有你说的这个错误: message sent to released object 
    你是编的吧?     那个错误写错了,汗。。是message sent to dealloced object  ,(希望没有拼错),我问下,这个错误和Unexcepted selector send to instance 的区别在哪里??? 什么时候会报第一个错误???一个是找不到对象,一个是找不到方法
      

  7.   

    release 仅仅是标记作废,可销毁。
    至于什么时候销毁,要看内存当前使用情况和销毁规则。
    貌似两年前的帖子里边讨论过。
      

  8.   

    release是比dealloc要缓一些的,release应该是先把销毁对象先放入队列(或是栈),记不清了,差不多就是这样的,最后才是调用dealloc来销毁