代码之家  ›  专栏  ›  技术社区  ›  Madhup Singh Yadav

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

  •  0
  • Madhup Singh Yadav  · 技术社区  · 15 年前

    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];
    

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

    3 回复  |  直到 15 年前
        1
  •  2
  •   Bryan McLemore    15 年前

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

    所以在这种情况下我相信 viewWithTag: 将返回一个对象,您不需要对其执行任何保留/释放操作,除非您希望将其作为ivar保留。

    我希望这有帮助。

        2
  •  2
  •   Community CDub    8 年前

    Understanding reference counting with Cocoa and Objective-C 这包括保留/发布问题。基本上,在这些情况下,您不必做任何事情,因为您可以取回不属于您的对象。

        3
  •  0
  •   Georg Schölly Crazy Developer    15 年前
    1. 你不必投稿。Objective-C是一种动态语言。

       DatabaseClass = *dbObj = [[appDelegateObject dbObjArray] objectAtIndex:i];
      
    2. 所有方法都应该返回Cocoa中的自动释放对象。例外:所有复制方法和所有alloc方法。

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

      不需要,因为编译器应该能够自动找到不再需要的变量。

      在GC环境中。