`

ios开发中init()方法重复执行,以及实例变量错乱的灵异现象

 
阅读更多

刚才发现一个灵异现象,还没找到原因,先记录一下:

我的MainViewController里有2个辅助类的引用:

@implementation YLSMainViewController

YLSLogoutDelegate *logoutDelegate;
YLSBackupDelegate *backupDelegate;
YLSResumeDelegate *resumeDelegate;

然后在viewDidLoad里创建这2个类的实例:

backupDelegate = [YLSBackupDelegate new];
resumeDelegate = [YLSResumeDelegate new];

下面分别是2个类的init()方法:

- (id)init
{
    if(self = [super init]){
        tasks = [NSMutableArray new];
        
        // 备份任务在下面依次添加
        [tasks addObject:[YLSMemberBackupTask new]];
        [tasks addObject:[YLSEmployeeBackupTask new]];
        [tasks addObject:[YLSServiceBackupTask new]];
        [tasks addObject:[YLSShowBackupTask new]];
        [tasks addObject:[YLSBillBackupTask new]];
        [tasks addObject:[YLSUserBackupTask new]];
        [tasks addObject:[YLSEnterpriseBackupTask new]];
    }
    return self;
}

- (id)init
{
    if(self = [super init]){
        tasks = [NSMutableArray new];
        
        // 恢复任务在下面依次添加
        [tasks addObject:[YLSEmployeeResumeTask new]];
    }
    return self;
}

结果运行的时候报异常,应用崩溃:

2013-12-17 16:40:42.306 NailShop[13926:456b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[YLSEmployeeResumeTask doBackup:]: unrecognized selector sent to instance 0xecb8990'


从异常信息看到,BackupDelegate的实例变量tasks里,存放的居然是ResumeDelegate的同名实例变量tasks里的对象……然后DEBUG又发现一个问题,BackupDelegate的init()方法执行了2遍,ResumeDelegate是正常的只执行一遍

反复检查没发现什么问题,最后只好把ResumeDelegate里的那个NSMutableArray的变量名改成resumeTasks,避免重名

问题是解决了,但是实在太灵异了……有人知道这个问题的原因吗?

分享到:
评论

相关推荐

    ios demo,自定义一个类,实例变量和成员变量的实现

    本示例“ios demo,自定义一个类,实例变量instance和成员变量的实现”旨在教授如何在Objective-C中创建自定义类并管理其实例变量和成员变量。 首先,我们需要理解什么是实例变量(instance variable,简称ivar)和...

    IOS开发环境搭建和简单实例

    本文将详细介绍如何搭建iOS开发环境,并提供一些简单的开发实例来帮助初学者快速入门。 ### iOS开发环境搭建 #### 注册Apple ID 为了下载开发所需的软件和工具,首先需要注册一个Apple ID。Apple ID是Apple服务的...

    iOS方法执行顺序

    在iOS开发中,理解方法执行顺序是至关重要的,这关系到程序的运行逻辑和性能优化。本文将深入探讨iOS中的方法执行流程,主要基于Objective-C的运行时(Runtime)系统,因为这是iOS方法调用的核心机制。 首先,我们...

    ios开发实例

    总结,"ios开发实例"涵盖的内容广泛,包括Swift语言基础、应用生命周期管理、UI设计与事件处理、网络编程、数据存储以及测试调试等多个方面。通过实践这些小项目,开发者可以加深对iOS开发的理解,提高自己的编程...

    一个简单的ios开发的实例

    总之,"一个简单的ios开发的实例"是一个很好的起点,它涵盖了iOS开发的基础知识,包括使用Xcode、创建自定义UI组件以及实现基本的用户交互。通过深入研究这个项目,开发者可以提升自己的iOS编程技能,并为更复杂的...

    Objective-C 2.0 with Cocoa Foundation--- 7,对象的初始化以及实例变量的作用域

    在Objective-C中,对象的初始化和实例变量的作用域是编程中的关键概念,对于理解和创建健壮的iOS和macOS应用程序至关重要。 首先,让我们深入理解对象的初始化过程。在Objective-C中,初始化通常涉及`init`方法。每...

    ios高级开发代码实例

    在iOS高级开发中,开发者需要掌握一系列复杂的技术和实践,以构建高效、稳定且用户体验卓越的应用。本资源包提供了一系列的代码实例,旨在帮助高级开发者深入理解并运用这些技术。以下是一些关键知识点的详细说明: ...

    学习ios(必看经典)牛人40天精通iOS开发的学习方法

    这是一套从一个对iOS开发感兴趣的学员到iOS...通过本系列课程的学习,希望使一个对iOS开发感兴趣,想从事iOS开发的学员,成为一名真正iOS开发人员,iOS从业者,iOS技术大牛,最重要的是学会解决开发中遇到困难的方法。

    ios开发90个实例源码苹果ios系统项目开发学习资料

    "ios开发90个实例源码苹果ios系统项目开发学习资料"提供了一套丰富的学习资源,适合初学者和有经验的开发者提升技能。这个压缩包包含90个不同的iOS应用实例,涵盖了各种功能和场景,是深入理解Swift编程语言以及iOS...

    ios开发440个实例源码大全.rar

    "ios开发440个实例源码大全.rar"提供了丰富的实例代码,旨在帮助开发者深入理解iOS开发中的各种技术和设计模式。这些实例涵盖了从基础控件的使用到复杂动画效果的实现,为开发者提供了宝贵的参考资源。 首先,我们...

    苹果ios开发100个实例源码.zip

    苹果ios开发100个实例源码; 个人信息输入表(支持表单增删) 二维码扫描应用demo 二维码生成器 从GIF动画创建一个动态UIImages 对象 从上往下拉出现加载view,动态加载内容 从上往下拉动态加载 从上往下拉动态加载3 ...

    EasyiOS_iOS开发类的各种封装

    EasyiOS可能是由一系列自定义的类别、分类、工具类以及可能的扩展框架组成的集合,它覆盖了iOS开发中的多个方面。 1. **类别(Category)封装**: 在Objective-C中,类别可以给已有的系统类添加方法,而无需继承。...

    ios开发实例WebService

    本实例"ios开发实例WebService"提供了一个很好的学习资源,通过实际的代码演示了如何在iOS应用中使用WebService进行通信。以下是对这个主题的详细解释: 一、WebService简介: WebService是一种基于Web的应用程序...

    iOS 开发实例

    本教程将深入探讨如何利用SUP平台进行iOS应用开发,通过实例来帮助学习者更好地理解相关概念和技术。 首先,让我们了解什么是SUP(Software Update Platform)。SUP是一个专门为移动设备设计的软件更新框架,它允许...

    iOS开发进阶-完整版

    根据提供的信息,我们可以推断出这是一本关于iOS开发进阶的书籍,作者为唐巧。虽然提供的部分内容似乎并不是实际的章节内容,但从标题、描述和标签中,我们可以推测本书可能涵盖的一些关键知识点。 ### iOS开发进阶...

    IOS开发指南(第5版) pdf下载地址

    《iOS开发指南(第5版)》是一本深入探讨iOS应用程序开发的专业书籍,旨在帮助开发者从零基础到熟练掌握Apple的移动操作系统上的应用构建过程。该书第五版更新了最新的开发技术和工具,确保读者能够使用最新的Xcode和...

    iOS开发进阶-唐巧.pdf

    第一部分介绍iOS 开发的常用工具,第二部分介绍iOS开发中的一些常见的实践经验,第三部分介绍iOS 开发中涉及的原理。 如果把成为iOS 开发高手的过程比作武侠小说中的修炼过程的话,工具、实践和理论的学习就分别对应...

    ios开发--Objective-C 基础总结-(重点已标识)

    通过 `alloc` 和 `init` 方法或 `new` 关键字可以创建对象,然后通过 `->` 操作符来访问对象的实例变量,并通过 `[对象名 方法名]` 的方式调用对象的方法。例如,创建一个 `Student` 类的对象 `stu`,并为其属性赋值...

    ios开发实用教材

    《iOS开发实用教材》是一本专为初学者设计的指南,旨在帮助读者快速掌握iOS应用开发的基本技能。这本书深入浅出地介绍了iOS开发的核心概念和技术,是新人进入iOS开发领域的理想起点。 首先,书中详细讲解了...

Global site tag (gtag.js) - Google Analytics