gpt4 book ai didi

objective-c - Obj-C,当 'self' 未设置为 '[(super or self) init...]' 的结果时使用的实例变量

转载 作者:太空狗 更新时间:2023-10-30 03:56:59 26 4
gpt4 key购买 nike

我知道不久前我问过一个类似的问题,但我还是有点不确定。同样的事情发生在几个地方。

“self”未设置为“[(super or self) init...]”的结果时使用的实例变量

一个

- (id)initWithCoder:(NSCoder *)decoder {
if (![super init]) return nil;
red = [decoder decodeFloatForKey:kRedKey]; //occurs here
green = [decoder decodeFloatForKey:kGreenKey];
blue = [decoder decodeFloatForKey:kBlueKey];
return self;
}

B

- (id)initWithFrame:(CGRect)frame title:(NSString*)str sideUp:(BOOL)up{

if(![super initWithFrame:frame]) return nil;

int y;
UIImage *img;

if(up){
img = [UIImage imageNamedTK:@"TapkuLibrary.bundle/Images/graph/popup"];
y = 5;
}else{
img = [UIImage imageNamedTK:@"TapkuLibrary.bundle/Images/graph/popdown"];
y = 14;
}

background = [[UIImageView alloc] initWithImage:img]; // occurs here

C

 - (id) initWithFrame:(CGRect)frame {
if(![super initWithFrame:frame]) return nil;

UILabel *titleBackground = [[[UILabel alloc] initWithFrame:
CGRectMake(0, 0, 480, 40)] autorelease];
titleBackground.backgroundColor = [UIColor whiteColor];
[self addSubview:titleBackground];

titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; // occurs here

对于 block A,这是正确的吗

self = [self init]; 
if( self != nil )
{

B&C

- (id) initWithFrame:(CGRect)frame {
super = [super initWithFrame:frame]
if(super != nil)
{

最佳答案

一般来说,你应该写:

self = [super init...];  // Potentially change "self"
if (self) {
something = x;
another = y;
}
return self;

这是因为 init 在某些情况下可能不会返回原始的 self 值。

关于objective-c - Obj-C,当 'self' 未设置为 '[(super or self) init...]' 的结果时使用的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8111549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com