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

2023-12-13

我知道不久前我问过类似的问题,但我仍然有点不确定。同样的事情在很多地方都发生过。

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

A

- (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

对于 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在某些情况下的价值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Obj-C,当“self”未设置为“[(super or self) init...]”的结果时使用的实例变量 的相关文章

随机推荐

  • 代理 HTML 元素

    我想检查一个库对我传递给它的视频元素做了什么 所以我天真地这样做了 cosnt videoElement new Proxy document querySelector video get target key const name ty
  • 嵌套 Flexbox 网格

    我已经构建了一个嵌套的弹性盒网格 将用于各个网关 目前 大概是由于使用outline 每个容器内的内容都会进入 并被隐藏 每个网关周围的空白区域 该空白区域充当每个 div 之间的间距 有没有更好的方法来处理网格间距 这可以让我确保内容不会
  • 仅适用于 Chrome 扩展程序中特定域的后台脚本

    我想知道如何仅针对特定 指定域运行 Chrome 扩展程序的后台脚本 例如 如果扩展程序仅在 Google com 的页面上运行 则没有理由让后台脚本在任何其他域上运行 在我的清单文件中 我设置了 匹配 但我仍然可以看到后台脚本在每个域和选
  • 如何使用PHP进行SQL的GROUP BY?

    我想从数据库表中选择行 并使用 PHP 而不是 SQL 基于参数 在本例中为按项目 对它们进行分组 SQL Clothes table id item owner 1 shoes joe 2 pants joe 3 hat joe 4 pa
  • Xamarin.Android:DrawerLayout.LayoutParams 中的重力参数

    我正在尝试创建一个DrawerLayout以编程方式使用Xamarin Android 但是我在尝试添加时遇到了问题ListView应该可以从左侧拖动 这是我的代码 DrawerLayout myDrawerLayout new Drawe
  • 显式复制构造函数

    我扩展了 std string 以满足我的需要 必须将自定义函数构建到名为的字符串类中自定义字符串 我已经定义了构造函数 class CustomString public std string public explicit Custom
  • 这个c程序有什么问题吗?调试发现程序被击中了 while (sqroot != 0); [复制]

    这个问题在这里已经有答案了 这是调试过程的截图我正在学习用 C 语言编程 我试图找出一个数字是否是镜像 但是程序编译没有错误 但没有给出所需的结果 调试程序发现它碰到了 while sqroot 0 Mirror number includ
  • 旋转图形但不旋转图例

    我有一个图形 我想旋转 90 度 问题是图例也会旋转 有没有办法只旋转图形 甚至能够将图例的旋转属性设置为 90 度就可以了 对于 xticks 例如我正在使用plt xticks range len mu mse index x labs
  • php Imagick::levelImage 用法

    我已经很努力了 但无法使这个方法正常工作 使用格式为 Imagick levelImage float blackPoint float gamma float whitePoint int channel Imagick CHANNEL
  • 如何在 DirectionsRenderer 打开 Bicycling 层后将其关闭

    In Google Maps API 中有关图层的文档 规定如下 Bicycling 图层对象将自行车道图层和 或特定于自行车的叠加层渲染到公共图层中 当请求骑行模式行驶方向时 默认情况下会在 DirectionsRenderer 中返回该
  • 使用 jQuery 即时创建

    我想在基于 AJAX 响应的盒子中动态构建 s 即如果responseText是3 我想构建3个选项
  • 本地化资源包中的枚举值

    我的 JSF 应用程序中的 i18n 枚举有问题 当我开始时 我有枚举 其中定义了文本 但现在 我在枚举中将密钥绑定到消息包 我的枚举示例之一 public enum OrderStatus implements CustomEnum PE
  • 定期将大数据 (json) 导入 Firebase

    我们面临的情况是 我们必须定期更新 firebase 中的大量数据 大约 5 个 Mio 记录 目前我们有一些大小约为 1 GB 的 json 文件 作为现有的第三方解决方案 here and here 存在一些可靠性问题 每个对象导入对象
  • 删除 XML 标签及其内容之间的任何内容

    我需要删除 XML 标记之间的任何内容 尤其是空格和换行符 例如 从以下位置删除空格和换行符 节点 gt n to get 节点 gt 这并不是为了手动解析 XML 而是在 XML 数据被工具解析之前准备好 更具体地说 我正在使用 Hpri
  • 不支持 URL 格式

    我正在使用 File OpenRead 方法读取文件 我给出这个路径 http localhost 10001 MyFiles folder abc png 我也尝试过这个 但没有运气 http localhost 10001 MyFile
  • 即使我删除了 Google 表单的所有脚本后,我仍然收到“Google Apps 脚本失败摘要:脚本”错误消息

    我最近尝试使用 GoogleForms 中的脚本将所有结果通过电子邮件发送到我的帐户 但它不起作用并不断向我发送错误电子邮件 所以我删除了所有脚本 为我创建的所有 GoogleForms 创建了新的电子表格 但我仍然收到这些错误电子邮件 看
  • 如何在 Matlab 中将 Kinect 原始深度信息转换为米?

    我在这里做了一些研究来理解这个主题 但没有取得好的结果 我正在使用 Kinect for Windows 和 Kinect SDK 1 7 我正在使用 matlab 来处理原始深度图信息 首先 我使用这种方法 https stackover
  • 匿名类可以完全不可变吗?

    在 Java Concurrency In Practice 一书中 有一个几乎不可变对象的示例 如果未正确发布 该对象将面临失败的风险 Taken from Java Concurrency In Practice p 51 Listin
  • 在 Angular JS 中传递值

    我是 Angular JS 的新手 我在index html 页面中创建了一个表单 当我在表单中填写详细信息并按提交时 它应该重定向到details html 页面 我可以在哪里显示表格上填写的详细信息 HTML div class for
  • Obj-C,当“self”未设置为“[(super or self) init...]”的结果时使用的实例变量

    我知道不久前我问过类似的问题 但我仍然有点不确定 同样的事情在很多地方都发生过 当 self 未设置为 super or self init 的结果时使用的实例变量 A id initWithCoder NSCoder decoder if