NSAllocateCollectable可以用iPhone应用程序吗?

时间:2010-09-08 21:21:39

标签: iphone objective-c xcode

我正在开发一个iphone应用程序,当我编译它时,我会收到一些警告。应用程序有效,但删除所有警告可能很有意思吗?

这是其中之一,我不能理解,主要是因为我是iPhone SDK的“新手”而且这个类来自另一个代码(免费代码)。

警告是:

  

警告:隐式声明函数'NSAllocateCollectable'   警告:初始化使得整数指针不带强制转换

代码是这样的:

double *MatrixAllocateArray( NSUInteger rows, NSUInteger columns )
{
     // Allocate an array to hold [rows][columns] matrix values
     NSCParameterAssert(rows!=0);
     NSCParameterAssert(columns!=0);
     __strong double *array = NSAllocateCollectable(SIZEOFARRAY(rows,columns),0); //(WARNINGS APPEAR HERE)
     NSCAssert2(array!=NULL,@"falled to allocate %dx%d matrix",rows,columns);

     return array;
}

正如您所看到的,此函数尝试分配矩阵,并由另一个函数调用。

double *MatrixAllocateEmptyArray( NSUInteger rows, NSUInteger columns )
{
     // Allocate a matrix array and fill it with zeros
     __strong double *emptyArray = MatrixAllocateArray(rows,columns);
     bzero(emptyArray,SIZEOFARRAY(rows,columns));

     return emptyArray;
}

这是由我执行和需要的函数调用的:

- (id)initWithRows:(NSUInteger)rowCount columns:(NSUInteger)colCount
{
     // Create an empty matrix

     return [self initWithAllocatedArray:MatrixAllocateEmptyArray(rowCount,colCount)
           rows:rowCount
        columns:colCount];
}

1 个答案:

答案 0 :(得分:2)

iPhone程序没有垃圾收集器。在这种情况下分配可收集的记忆几乎毫无意义,所以你可能运气不好。您应该修复您的程序和/或框架,以使用传统的Objective-C内存管理实践。您的具体警告的原因:

  1. implicit declaration of function 'NSAllocateCollectable'

    您的iPhone应用程序没有声明NSAllocateCollectable,因此编译器将回退到隐式函数声明的默认C规则,这意味着它将假定它返回int

  2. initialization makes pointer from integer without a cast

    由于隐式声明的上一个问题,您的代码会向编译器看起来像尝试将int分配给类型为double *的变量 - 从整数类型到指针的隐式转换是警告的原因。