请问这段Objective-C代码什么意思?

UIImage *imageMaxBase = [UIImage imageNamed:@" right.png "];
UIImage *imageForMax = [imageMaxBase stretchableImageWithLeftCapWidth:4 topCapHeight:0];

前面创建了一个图片对象imageMaxBase,
后面又创建了一个imageForMax,但是却在imageMaxBase中开内存,这是什么意思啊?

在我的记忆中一直都是这样写的啊
UIImage *imageForMax = [UIImage stretchableImageWithLeftCapWidth:4 topCapHeight:0];

我是初学者,谁能给我仔细讲讲。谢谢啦
最新回答
半衾梦

2024-09-22 16:14:59

你想做图片的拉伸,首先初始化UIImage的一个实例imageMaxBase,然后再stretchableImage对此图片进行拉伸。上面的使用方法是正确的,你的记忆是错误的。

从接口你也可以看到,
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
这是一个 -实例方法,你那么写会报找不到+方法的警告的
同时需要注意的是,这个方法是iOS5之后Deprecated的方法了,新的替代方法是
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
追问
这位哥哥你好,其实我要问的是这样的: UILabel *labelA = [ [ UILabel alloc ] init ]; 比如说这段代码:alloc是分配内存,init是初始化对象,但是前面的UILabel和后面的UILabel我有些分不清楚。
能帮忙解释下这两个UILabel吗,, 谢谢啦。
追答
这位弟弟,如果你这么问的话你需要去看基础语法。
首先明白现在是面向对象的编程
UILabel是类名,继承于UIView,最终你会发现,它的最父类是NSObject。
在NSObject你会发现有个方法是+ (id)alloc;
所以[ UILabel alloc ]是调用UILabel的这个+方法
而UILabel *labelA的这个UILabel *,是指定义一个UILabel类型的变量labelA。
追问
前面的UILabel意思是:创建个labelA实力变量  这个实例变量是UILabel类型的,
后面的UILabel意思是:为实例变量labelA在UILabel中分配一块内存。
我这样理解对么哥哥?
追答
后面的说法有一点不对妹妹
不是在UILabel中分配一块内存,是在内存中分配一块空间给labelA,这块空间是UILabel那么大,有多大呢,我不知道,alloc知道。
大体上理解的已经不错了。
追问
UIImage *imageForMax = [imageMaxBase stretchableImageWithLeftCapWidth:4 topCapHeight:0];

那这段代码又怎样理解呢?imageForMax是UIImage的实例变量,然后后面怎么理解呢?imageMaxBase是UIImage刚刚初始化出来的一个实例变量啊,把这个实例变量imageMaxBase写在这个位置是什么意思呢?
追答
你看看你,一个问题你追问了3次,我是买一送三啊。再追问好像就要扣你分了
你还是没有理解,
UIImage是类,alloc是类方法,功能是创造出一个实例

imageForMax是实例,stretchableImageWithLeftCapWidth: topCapHeight:是实例方法(减号方法)

UIImage类就好像一个模板,呱唧,造了一个imageForMax实例,它还能再造一个imageForMax2,imageForMax3 ,更多更多。
虽然这些实例是不一样的实例,但他们都被UIImage赋予了可以调用stretchableImageWithLeftCapWidth: topCapHeight:的能力。