Objective-c中属性的内存问题

时间:2010-08-05 07:34:45

标签: iphone objective-c

UIImage * image = [[UIImage alloc] initWithData:data];     ((YKSubCategory *)[_ subCategories objectAtIndex:connection.tag - 1])。menuImage = image;     [image release];

这是我写的代码。数据存在并创建设计的图像。 (我用imageview测试了它,图像出现了)。 当我尝试设置menuImage属性时出现问题。它不会被设置。我不知道为什么。所以menuImage属性的值仍为零。 这是属性定义:

@property (nonatomic, retain) UIImage *menuImage;

可能是什么问题?


编辑:

我已经将walkytalky请求的代码分开了。 这是我写的代码:

UIImage *image = [[UIImage alloc] initWithData:data];
YKSubCategory *subCategory = (YKSubCategory *)[_subCategories objectAtIndex:connection.tag - 1];
subCategory.menuImage = image;
[image release];
[_tableView reloadData];

所以现在有趣的是subCategory变量是我期望的变量。然后在我设置menuImage属性之后,设置此属性的变量。我可以在调试器中看到,但是在数组中没有设置。这是什么?

1 个答案:

答案 0 :(得分:1)

(i)您有@synthesize - d menuImage吗?

(ii)你可以分解setter行来获得YKSubCategory对象并测试它是否存在并且是你期望的?

YKSubCategory* target = (YKSubCategory*)[_subCategories objectAtIndex:connection.tag - 1];
NSLog("subcategory target = %@", target);
// other tests here
target.menuImage = image;

否则,我认为我们没有足够的信息来解决这个问题。设置后menuImage会立即显示什么?


编辑:当你说“数组未设置”时,你的意思是数组中的实际对象与你刚刚设置的实际对象有何不同?或者,当您在加载表格数据时返回数组时,menuImage不再设置?或者它只是没有在表中显示?

第一个似乎是不可能的,所以让我们考虑第二个和第三个。

如果在您返回menuImage时已重置- (void) setMenuImage:(UIImage*)newImage { if ( newImage != menuImage ) { NSLog(@"Changing menuImage from %@ to %@", menuImage, newImage); [newImage retain]; [menuImage release]; menuImage = newImage; } } ,则必须在某处设置一些代码。这可能不会通过属性访问器,但对于初学者,您可能会显式实现setter来记录更改:

YKSubCategory

另一种可能性是数组中的实际{{1}}对象已更改,或者甚至数组不同,因此请检查两个位置中的指针是否相同。

另一方面,如果设置菜单图像ivar ,但它没有显示在表格中,则需要检查绘图代码。