Ios 指针的自定义对象数组所有指向同一对象的指针
这是我的第一篇帖子,如果有点乱,我很抱歉 我想动态添加我在Ios 指针的自定义对象数组所有指向同一对象的指针,ios,objective-c,xcode,objective-c++,Ios,Objective C,Xcode,Objective C++,这是我的第一篇帖子,如果有点乱,我很抱歉 我想动态添加我在NSMutableArray中创建的自定义对象Pixra。因为它使用一个接口,所以我用一个指针实例化我的对象:Pixra*pix=[Pixra alloc] 当我解析数组时,我可以看到我添加的所有指针都指向同一个对象,因为属性quality的值对于数组的所有元素都是相同的。下面是我在数组中添加元素的循环的实现 NSMutableArray* imagesRaw = [NSMutableArray array]; double j=0.0;
NSMutableArray
中创建的自定义对象Pixra
。因为它使用一个接口,所以我用一个指针实例化我的对象:Pixra*pix=[Pixra alloc]代码>
当我解析数组时,我可以看到我添加的所有指针都指向同一个对象,因为属性quality
的值对于数组的所有元素都是相同的。下面是我在数组中添加元素的循环的实现
NSMutableArray* imagesRaw = [NSMutableArray array];
double j=0.0;
for (UIImage* img in images){
Pixra* pix = [Pixra alloc];
[pix setMatrix:img];
[pix setQuality:j];
[imagesRaw addObject:pix];
cout << [imagesRaw[0] getQuality] << "\n";
j++;
}
NSMutableArray*imagesRaw=[NSMutableArray];
双j=0.0;
用于(UIImage*图像中的img){
Pixra*pix=[Pixra alloc];
[pix设置矩阵:img];
[pix设定质量:j];
[imagesRaw addObject:pix];
你忘了初始化了吗
Pixra* pix = [Pixra alloc];
根据以下文件:
对象只有在初始化后才能使用
在某些情况下,init()方法的自定义实现可能会返回替换对象。因此,在后续代码中必须始终使用init()返回的对象,而不是alloc或allocWithZone:返回的对象
因此,替换
Pixra* pix = [Pixra alloc];
与
或
您忘记了init
Pixra* pix = [Pixra alloc];
根据以下文件:
对象只有在初始化后才能使用
在某些情况下,init()方法的自定义实现可能会返回替换对象。因此,在后续代码中必须始终使用init()返回的对象,而不是alloc或allocWithZone:返回的对象
因此,替换
Pixra* pix = [Pixra alloc];
与
或
当您像这样写入类实现文件时,编译器将其作为全局变量。每个类实现文件只有一个内存块
UIImage* matrix;
double quality;
有了这些属性,所有的Pixra
对象实例都使用全局变量来保存它们,通常在Sington实例
设计模式中使用
那么如何更正它呢?如果您正在寻找正确的属性来为每个Pixra
实例保存矩阵
和质量
值,请像这样使用@property
@interface Pixra : NSObject
@property (strong) UIImage *matrix;
@property (assign) CGFloat quality;
@end
请注意,此属性实现涵盖了setMatrix
和matrix
属性方法。请查看有关google的更多详细信息。当您像这样写入类实现文件时,编译器将其作为全局变量。每个类实现文件只有一个内存块
UIImage* matrix;
double quality;
有了这些属性,所有的Pixra
对象实例都使用全局变量来保存它们,通常在Sington实例
设计模式中使用
那么如何更正它呢?如果您正在寻找正确的属性来为每个Pixra
实例保存矩阵
和质量
值,请像这样使用@property
@interface Pixra : NSObject
@property (strong) UIImage *matrix;
@property (assign) CGFloat quality;
@end
请注意,此属性实现涵盖了setMatrix
和matrix
属性方法。请在google中查看更多有关属性的详细信息。谢谢,我刚刚尝试了Pixra*pix=[Pixra new];
但仍然无法迭代hanks,我刚刚尝试了Pixra*pix=[Pixra new];
但不能仍然重复它的输入错误吗?如果它不是输入错误,我用它来检查数组中添加的第一个实例是否更新了它的质量。通过这样做,我可以看到每次我在数组中添加一个对象时,它都会增加,而你不应该尝试Pixra*pix=[[Pixra alloc]init]是的,我试过了,但没有成功,我真的不明白问题出在哪里from@Chocobouc您知道,添加对象会将其添加到数组的末尾,而不是数组的开头。无论添加新对象如何,数组中的第一个对象始终相同。您需要使用imagesRaw[j]
或imagesRaw[(int)imagesRaw.count]
,而不是imagesRaw[0]
它是打字错误吗?如果它不是打字错误,我用它来检查数组中添加的第一个实例是否更新了它的质量。通过这样做,我可以看到每次我在数组中添加对象时,它都会增加,而你不应该尝试Pixra*pix=[[Pixra alloc]init];
?是的,我试过了,但没有成功,我真的不明白问题出在哪里from@Chocobouc您知道,添加对象会将其添加到数组的末尾,而不是数组的开头。无论添加新对象如何,数组中的第一个对象始终是相同的。您需要使用imagesRaw[j]
或imagesRaw[(int)imagesRaw.count]
,而不是imagesRaw[0]
,或者如果您不想创建属性,则可以使用@implementation-Pixra:NSObject{UIImage*矩阵;双质量;}
语法。@kamaldeepsinghbhatia它应该是@implementation-Pixra{UIImage*矩阵;双质量;}
,我想。哦,是的,:NSObject
不应该与@implementation
一起。对吗?或者缺少其他东西?就是这样,我应该更仔细地阅读文档,我用一个结构实现了一个解决方案,但我将使用它。谢谢!或者如果你不想创建属性,那么你可以使用@implementation Pixra:NSObject{UIImage*矩阵;双质量;}
语法。@kamaldeepsinghbhatia它应该是@implementation Pixra{UIImage*矩阵;双质量;}
,我想。哦,是的,:NSObject
不应该与@implementation
一起。对吗?或者缺少其他东西?就是这样,我应该更仔细地阅读文档,我用一个结构实现了一个解决方案,但我将使用它。谢谢!