Iphone 如何释放或取消类型强制转换对象?

Iphone 如何释放或取消类型强制转换对象?,iphone,cocoa-touch,xcode,memory-management,Iphone,Cocoa Touch,Xcode,Memory Management,我对通过类型转换初始化的对象有点困惑。像 UITextField *txtFld = (UITextField *)[self.view viewWithTag:someTag]; // // //some code here for this text field usage // // 现在,当我使用完这个文本字段后,我应该将它设置为nil还是让系统处理它 现在,对于数据库类的对象(使用sqlite),我创建了一个类似 DatabaseClass *dbObj = (DatabaseCla

我对通过类型转换初始化的对象有点困惑。像

UITextField *txtFld = (UITextField *)[self.view viewWithTag:someTag];
//
//
//some code here for this text field usage
//
//
现在,当我使用完这个文本字段后,我应该将它设置为nil还是让系统处理它

现在,对于数据库类的对象(使用sqlite),我创建了一个类似

DatabaseClass *dbObj = (DatabaseClass *)[[appDelegateObject dbObjArray] objectAtIndex:index];
在我完成此对象后,是否也应将其设置为零

或者应该初始化对象,如下所示:

DatabaseClass *dbObj = (DatabaseClass *)[[[appDelegateObject dbObjArray] objectAtIndex:index] retain];

然后释放它,最后将其设置为nil。

当您键入cast时,就像没有创建新对象一样。它只是告诉编译器,您正在使用的对象应该被视为一个
数据库类*

因此,在本例中,我相信
viewWithTag:
将返回一个对象,您不需要对其执行任何保留/释放操作,除非您希望将其作为ivar保留


我希望这会有所帮助。

当您像这样键入cast时,不会创建新对象。它只是告诉编译器,您正在使用的对象应该被视为一个
数据库类*

因此,在本例中,我相信
viewWithTag:
将返回一个对象,您不需要对其执行任何保留/释放操作,除非您希望将其作为ivar保留


我希望这会有所帮助。

这里的施法与此无关,重要的是如何获得对对象的引用。这里有一个很好的SO问题:涵盖了保留/发布问题。基本上,在这些情况下,您不必做任何事情,因为您将获得不属于您的对象。

这里的强制转换无关,重要的是如何获得对对象的引用。这里有一个很好的SO问题:涵盖了保留/发布问题。基本上,在这些情况下,您不必做任何事情,因为您可以取回不属于您的对象

  • 你不必投稿。Objective-C是一种动态语言。 如果这引发编译器警告,请更正我

  • 所有方法都应该返回Cocoa中的自动释放对象。例外:所有复制方法和所有alloc方法

    因此,不保留/释放它们是保存的,因为它们是自动释放的

  • 将变量设置为
    nil
    仅在垃圾收集环境中有效。只要你在为iPhone编程,这对你来说并不重要

    但即使在垃圾收集环境设置中,也不需要将变量设置为
    nil
    ,因为编译器应该能够自动找出不再需要的变量

    这是个例外。在GC环境中,您可以而且有时应该将实例的属性设置为
    nil

  • 你不必投稿。Objective-C是一种动态语言。 如果这引发编译器警告,请更正我

  • 所有方法都应该返回Cocoa中的自动释放对象。例外:所有复制方法和所有alloc方法

    因此,不保留/释放它们是保存的,因为它们是自动释放的

  • 将变量设置为
    nil
    仅在垃圾收集环境中有效。只要你在为iPhone编程,这对你来说并不重要

    但即使在垃圾收集环境设置中,也不需要将变量设置为
    nil
    ,因为编译器应该能够自动找出不再需要的变量

    这是个例外。在GC环境中,您可以而且有时应该将实例的属性设置为
    nil

  •  DatabaseClass = *dbObj = [[appDelegateObject dbObjArray] objectAtIndex:i];