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
一起。对吗?或者缺少其他东西?就是这样,我应该更仔细地阅读文档,我用一个结构实现了一个解决方案,但我将使用它。谢谢!