目标C中的无对象引用

时间:2013-04-24 18:32:44

标签: objective-c cocoa-touch ios6 null

我从外部类调用一个类方法以获取对象引用,在本例中是对UIImage的引用。我可以成功调用它并从myOtherClass内部取回它,但是当我从myClass调用该方法时,它总是返回nil。

@implementation myClass
...
- (UIImage *) gethThumb: (UIImage *) originalImage {

     // always comes back nil:
     UIImage* thumb = [MyOtherClass makeThumb: originalImage];
     return thumb;
}
...
@end

@implementation MyOtherClass

 ...
+ (UIImage*) makeThumb: (UIImage *) fullImage  {
    CGSize imageSize = [fullImage size];
    int shortestEdge = MIN(imageSize.width, imageSize.height);

    CGRect rect = CGRectMake((imageSize.width - shortestEdge)/2, (imageSize.height - shortestEdge)/2, shortestEdge, shortestEdge);
    CGImageRef imageRef = CGImageCreateWithImageInRect([fullImage CGImage], rect);
    UIImage *thumb = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef);

    CGSize thumbsize = CGSizeMake(180, 180);
    UIGraphicsBeginImageContext(thumbsize);
    [thumb drawInRect:CGRectMake(0, 0, thumbsize.width, thumbsize.height)];
    UIImage *scaledThumb = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();

    //scaledThumb is not nil here:
    return scaledThumb;
}
...
@end

我走过去观察了这个值,我可以看到它仍然在makeThumb方法中指向一个有效的内存地址,但是一旦它返回指向外部类的指针,内存地址突然变为0。

我尝试将其编写为实例方法并实例化对象,然后使用

调用该方法
thumb = [self.myInstanceOfOtherClass makeThumb: originalImage];

并且还将方法更改为接受对象引用:

UIImage *thumbRef = nil;
thumb = [self.myInstanceOfOtherClass makeThumb: originalImage thumbRef:thumbRef];  

- 在myOtherClasss中:

- (UIImage*) makeThumb: (UIImage *) fullImage thumbRef:(UIImage *) thumbRef {
    ...
    thumbRef = scaledThumb;
    ...
}

...我认为会阻止ARC丢失对象的引用(如果这就是这里发生的事情)。

我对Objective C相对较新,我希望有人可以向我解释为什么会这样。对象在返回外部类之前是否被释放?我是否必须将其转换为外部类中强大的属性,以便不会丢弃引用?

忘记提及:引用指向从UIImagePickerControllerDelegate方法中对摄像机图像的引用创建的图像,didFinishPickingMediaWithInfo。在创建此拇指之前,相机UIView将被关闭。我想也许这就是我失去参考的原因。

先谢谢你的帮助!!

1 个答案:

答案 0 :(得分:-2)

您从未为图像分配内存。请执行以下操作:

UIImage *myimage =[ [ UIImage alloc] init].