覆盖类变量,或至少在objective-c / cocoa中的变量类型

时间:2009-08-04 22:49:58

标签: override nscoding

我的困境如下:

我有一个UIImage的自定义子类(我添加了一些序列化方法,即initWithCoder,encodeWithCoder),我想将我的自定义子类作为变量应用于UIImageView,或者至少是UIImageView的子类。

如您所知,UIImageView有一个名为“image”的变量,它是UIImage类型。我想用我的子类覆盖这个变量。

我的目标是拥有一个UIimageView,它将响应archivedDataWithRootObject而不会因为encodeWithCoder消息被发送到变量图像而崩溃。如果有更聪明的方法,我愿意接受建议。

谢谢!

[edit]我认为一种可能的路线是通过某种类型的铸造...但是:

UIImage *image = [[UIImage alloc] init];
MLImage *mlImage = [[MLImage alloc] init];
mlIamge = (MLImage*)image;

当我在第二行执行后鼠标悬停在mlImage上时,我可以看到它是MLImage类型。但是,即使使用强制转换,在第三行执行后,mlImage也会成为UIImage。如何将图像类型更改为MLImage? [/编辑]

1 个答案:

答案 0 :(得分:1)

小心你的术语。 覆盖属性是不可能的 - UIImageView仍然拥有自己的image属性,它不会被替换。您正试图覆盖访问者-image-setImage:)。

你是对的,施法是一条更好的路线。但是你的例子有一个问题:演员是非法的。执行[[UIImage alloc] init]时,您正在创建UIImage类型的对象。什么都不会改变,包括你的演员。转换是告诉编译器的一种方式(在你的情况下)“我知道你认为这个UIImage*UIImage,但它确实是MLImage。”在这种情况下,这是一个谎言,因为它确实是UIImage - 你在那里分配了它。

例如:

MLImage

然后在其他地方:

image

您将获得自定义图像对象。但它首先必须是UIImageView