我正在开发一个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];
}
答案 0 :(得分:2)
iPhone程序没有垃圾收集器。在这种情况下分配可收集的记忆几乎毫无意义,所以你可能运气不好。您应该修复您的程序和/或框架,以使用传统的Objective-C内存管理实践。您的具体警告的原因:
implicit declaration of function 'NSAllocateCollectable'
您的iPhone应用程序没有声明NSAllocateCollectable
,因此编译器将回退到隐式函数声明的默认C规则,这意味着它将假定它返回int
。
initialization makes pointer from integer without a cast
由于隐式声明的上一个问题,您的代码会向编译器看起来像尝试将int
分配给类型为double *
的变量 - 从整数类型到指针的隐式转换是警告的原因。