首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否可以在不使用继承的情况下调用viewDidAppear上的一些代码

在不使用继承的情况下调用viewDidAppear上的一些代码是可以实现的。在iOS开发中,可以通过以下几种方式来实现:

  1. 使用通知(Notification)机制:在viewDidAppear方法中发送一个自定义的通知,然后在需要调用该代码的地方监听该通知,并执行相应的代码。这样可以实现在不同的类中调用viewDidAppear上的代码。具体实现步骤如下:
    • 在viewDidAppear方法中发送通知:NotificationCenter.default.post(name: NSNotification.Name("ViewDidAppearNotification"), object: nil)
    • 在需要调用代码的地方添加通知监听:NotificationCenter.default.addObserver(self, selector: #selector(handleViewDidAppearNotification), name: NSNotification.Name("ViewDidAppearNotification"), object: nil)
    • 在相应的方法中执行代码:@objc func handleViewDidAppearNotification() { // 执行相应的代码 }
  2. 使用闭包(Closure):在需要调用viewDidAppear上的代码的地方定义一个闭包,并将其作为参数传递给其他类或方法,在需要执行代码的地方调用该闭包即可。具体实现步骤如下:
    • 在需要调用代码的地方定义闭包:var viewDidAppearClosure: (() -> Void)?
    • 在viewDidAppear方法中调用闭包:viewDidAppearClosure?()
    • 在其他类或方法中设置闭包:otherClass.viewDidAppearClosure = { // 执行相应的代码 }
  3. 使用代理(Delegate):定义一个协议,并在需要调用viewDidAppear上的代码的地方设置代理,并调用代理方法,在其他类中实现该代理方法并执行相应的代码。具体实现步骤如下:
    • 定义协议:protocol ViewDidAppearDelegate: class { func viewDidAppear() }
    • 在需要调用代码的地方设置代理:weak var delegate: ViewDidAppearDelegate?
    • 在viewDidAppear方法中调用代理方法:delegate?.viewDidAppear()
    • 在其他类中实现代理方法并执行代码:class OtherClass: ViewDidAppearDelegate { func viewDidAppear() { // 执行相应的代码 } }

以上是在不使用继承的情况下调用viewDidAppear上的一些代码的几种常见方式。根据具体的场景和需求,选择适合的方式来实现即可。

相关搜索:是否可以在不传递代码块的情况下使用ruby vcr gem?是否可以在不阻止所有表单的情况下使用ShowDialog?在不转换为列表的情况下,是否可以在IQueryable上建立索引?是否可以在不继承类的情况下向非动态ActionScript 3类添加行为?是否可以在不上传文件的情况下保存模型?是否可以在不注入每个组件的情况下调用react-intl api方法是否可以在不停止程序的情况下调用内部调用` `halt()`的函数?是否可以在不注册EMM社区的情况下构建DPC?Elasticsearch -是否可以在不索引字段的情况下创建直方图我可以在C++模板中使用一些代码作为参数吗?(不添加函数调用)是否可以使用directline在不传递microsoft bot连接器的情况下调用我的bot webservice?是否可以在不触发反应式表单控件上的valueChanges的情况下触发statusChanges?是否可以在不附加内容的情况下查看screen会话的内容?是否可以在不更改HTML的情况下更改内联元素的顺序?是否可以在没有Rails的情况下使用FactoryGirl?是否可以在不更改其哈希值的情况下修改文件是否可以在不访问DataStage安装的情况下查看DataStage作业是否可以在不丢失数据的情况下更改Kafka主题配置?我可以在不运行的情况下从一些python代码中获取变量及其类型的列表吗?是否可以在不调用onSeeked的情况下动态设置视频的currentTime?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

UIViewController生命周期

无论是从nib文件加载,还是通过纯代码编写界面,viewDidLoad方法都会执行。我们可以重写这个方法,对通过nib文件加载view做一些其他初始化工作。...合创建一些附加view和控件 3、ViewWillAppear 视图加载完成,并即将显示屏幕时,会调用viewWillAppear方法,在这个方法里,可以改变当前屏幕方向或状态栏风格等。...7、ViewWillDisAppear 视图即将消失 8、ViewDidDisAppear 视图已经消失 9、ViewWillUnload(已废弃) 当内存过低时,需要释放一些不需要使用视图时,即将释放时调用...,可以简单理解为显示最前面的window为keywindow) Push到下一层顺序 viewWillDisappear->viewWillAppear->viewDidDisappear->viewDidAppear...从继承关系来看,UIWindow继承自UIView,所以UIWindow除了具有UIView所有功能之外,还增加了一些特有的属性和方法,而我们最常用方法,就是App刚启动时,调用UIWindow

1.9K10
  • 【IOS开发高级系列】Objective-c Runtime专题总结

    NSObject还有些方法能在运行时获得类信息,并检查一些特性,比如class返回对象类;isKindOfClass:和isMemberOfClass:则检查对象是否指定继承体系中;respondsToSelector...我们可以实现 forwardInvocation: 方法来对不能处理消息做一些默认处理,也可以将消息转发给其他对象来处理,而抛出错误。        ...否则, forwardInvocation: 将不可能会被调用。 6.3 转发和多继承         转发和继承相似,可以用于为OC编程添加一些继承效果。...使用函数objc_removeAssociatedObjects可以断开所有关联。通常情况下不建议使用这个函数,因为他会断开所有关联。只有需要把对象恢复到“原始状态”时候才会使用这个函数。...通常情况下不建议使用这个函数,因为他会断开所有关联。只有需要把对象恢复到“原始状态”时候才会使用这个函数。

    36030

    iOS开发·runtime原理与实践: 方法交换篇(Method Swizzling)(iOS“黑魔法”,埋点统计,禁止UI控件连续点击,防奔溃处理)

    本系列尝试阐述runtime相关理论同时介绍一些实战场景,而本文则是本系列方法交换篇。...为了避免Swizzling代码被重复执行,我们可以通过GCDdispatch_once函数来解决,利用dispatch_once函数内代码只会执行一次特性。 2....,还没有全局地控制他们短时间内不可连续点击(也许有过零星地某些网络请求接口之前做过一些控制)。...其实点击事件runtime里面是发送消息,我们可以把要发送消息SEL 和自己写SEL交换一下,然后自己写SEL里面判断是否执行点击事件。...抽象工厂内部有很多其它继承自当前类子类,抽象工厂类会根据不同情况,创建不同抽象对象来进行使用

    2.6K60

    iOS数据埋点统计方案(附Demo): 运行时Method Swizzling机制与AOP编程(面向切面编程)

    通过继承和重写系统方法 -- 利用写好统计一个基类,让需要VC继承自该基类,或者调用重写过统计逻辑按钮基类等等。...简单分类,添加类方法或者示例方法 -- 将统计逻辑封装在分类方法里面,需要统计地方导入并调用分类方法。.../// 原始方法前调用 AspectOptionAutomaticRemoval = 1 << 3 /// 执行1次后自动移除 }; 调用示例代码: [UIViewController...也可以写在这个清单里面。...AppDelegate类方法中根据Plist监听清单进行HOOK 场景需求:需要监听不同类,不同按钮,系统方法,及表单元点击事件 方案特点:是可代码配置需要监听清单Plist,但是不能将需要注入统计代码

    89110

    ViewController及View生命周期1. 起因2. Controller生命周期3. View生命周期4. 内存警告

    意思是说viewDidLoad视图被加载后调用。如果使用了布局文件,那么会在布局文件加载后被调用。...我们再来看看viewDidAppear描述: Called when the view has been fully transitioned onto the screen 意思是视图出现在屏幕之后才调用...为了能够进一步搞清楚之间区别,我们不同屏幕运营一下这两个方法看看调度时间点。我们将Xcode默认使用5S去设置一下,屏幕大小是320*568,但是如果运行在6s上会怎么样。...所以系统在这两者之间肯定存在一个屏幕适配过程。 从上面的结果可以看到,如果需要调整空间frame,其实是放在viewDidAppear中最靠谱。...Default does nothing 视图被驳回时调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作。

    1.4K30

    UI篇-VC生命周期以及UIViewlayoutSubviews和drawRect方法

    一个很常见问题,我们需要在VC被销毁时候处理一些事情,可是 viewWillDisappear 不管是入栈新视图还是出栈当前视图都会被调用,无法判断,结合我之前说原理,我们可以利用下面这个方法判断当前...setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中一些数据。...UIView中方法执行顺序大概是这样: init 方法 >>属性set/get 方法>> layoutSubviews(当然是要达到触发条件)>>drawRect, 使用得当可以View调用中起到很好效果...7、直接调用setLayoutSubviews。 drawRect以下情况下会被调用: 1、如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。....这样可以控制器中设置一些值给View(如果这些View draw时候需要用到某些变量 值). 2、该方法调用sizeToFit后被调用,所以可以调用sizeToFit计算出size。

    1.8K30

    UIViewController生命周期及iOS程序执行顺序

    因为当这个视图再次显示屏幕时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。...2) - (void)viewDidUnload; 在内存足够情况下,软件视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示viewcontroller就会收到内存不够警告,然后就会释放自己拥有的视图...上述方法流程图可以简单用如下表示: 运行APP —> 载入视图 —> 调用viewDidLoad方法 —> 调用viewWillAppear方法 —> 调用viewDidAppear方法 —> 正常运行...他们都可以用来视图载入时候,初始化一些内容。 但是他们有什么区别呢? viewDidLoad 此方法只有当view从nib文件初始化时候才被调用。...如果设备内存不足时候, view 控制器会收到didReceiveMemoryWarning消息。 默认实现是检查当前控制器view是否使用

    1.7K110

    Objective-C 运行时中最具争议黑魔法:Method Swizzling

    例如:我们想要在一款 iOS app 中追踪每一个视图控制器被用户呈现了几次: 这可以通过每个视图控制器 viewDidAppear: 方法中添加追踪代码来实现,但这样会大量重复样板代码。...继承是另一种可行方式,但是这要求所有被继承视图控制器如 UIViewController, UITableViewController, UINavigationController 都在 viewDidAppear...两个方法都是可选,并且只有方法被实现情况下才会被调用。...调用 _cmd 下面代码正常情况下会出现循环: ~~~{objective-c} - (void)xxx_viewWillAppear:(BOOL)animated { [self xxx_viewWillAppear...交换了方法实现并且一些回调方法不会调用原生方法实现这可能会造成底层实现崩溃。

    44310

    iOS 小技能:Method Swizzling (交换方法IMP)

    交换两个方法实现一般写在分类load方法里面,因为load方法会在程序运行前加载一次,而initialize方法会在类或者子类 第一次使用时候调用,当有分类时候会调用多次。...不要在load里面取加载对象,因为我们再load调用时候根本就不确定我们对象是否已经初始化了,所以不要去做对象初始化 I Method Swizzling基础 Objective-CRuntime...Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息唯一依据是selector名字。因此我们可以在运行时偷换selector对应方法实现,达到给方法挂钩目的。...例如:A Present B, 有时因为业务逻辑需要,必须在viewWillAppear, viewDidAppear里写一些代码,当B 调用dismiss方法时候, A这个两个方法不会触发,...我想法是B 写一个block,B调用dismiss之前,利用block回调A相关业务逻辑代码。如果有其他更好方法请告诉我。

    1.6K10

    iOS内存管理-深入解析自动释放池

    ); } 显式使用__autoreleasing修饰符情况非常少见,这是因为ARC很多情况下,即使是不显式使用__autoreleasing,也能实现对象被注册到释放池中。...,打开Runtime源码工程,NSObject.mm文件中可以找到它定义,摘取其中关键代码如下: //大致641行代码开始 class AutoreleasePoolPage { # define...push方法内部调用是autoreleaseFast方法,并传入边界对象(POOL_BOUNDARY)。hotPage可以理解为当前正在使用AutoreleasePoolPage。...; } @end //打印结果: //viewWillAppear:WUYUBEICHEN //viewDidAppear:(null) 代码分析:自动变量string离开viewDidLoad...所以,一般情况下,子线程中即使我们手动添加自动释放池,也不会产生内存泄漏。

    5.2K82

    Swift 周报 第三十八期

    上期话题结果 从投票结果可以看出,苹果品牌忠诚度和声誉一些用户中仍然很高,而华为和小米等品牌则通过不同性价比策略吸引了其他一些用户。...团队被孤立美国和国外不同小组中,没有全球领导者。一些高管鼓励工程师传播有关延误或挫折坏消息,从而导致设定不切实际目标和最后期限。 苹果在十多年前就致力于生产用于其产品各种芯片。...小组件和实时活动:小组件现在支持交互操作,并且可以位置运行,例如 iPhone 待机界面、iPad 锁定屏幕、Mac 桌面以及 Apple Watch 智能叠放。...正在审查提案 SE-0409[3] 导入声明使用访问级别修饰符 提案正在审查。 通过导入声明使用访问级别修饰符来声明依赖项可见性,可以强制规定哪些声明可以引用导入模块。...它们很简单,并且由于不需要是高性能服务器,所以我非常乐意阻塞:我只需将代码粘贴在 NSOperation 中,串行 NSOperationQueue 运行它,并使用回调来传递结果。

    22330

    iOS面试题-UI篇

    UIView显示屏幕归功于CALayer,通过调用drawRect方法来渲染自身内容,调节CALayer属性可以调整UIView外观, UIView继承自UIResponder,比起CALayer...可以响应用户事件,Xcode6之后可以方便通过视图调试功能查看图层之间关系 UIView是iOS系统中界面元素基础,所有的界面元素都继承自它。...例如下面的代码会在目标View敷上一层黑色透明薄膜。...补充部分,这部分有深度了,大致了解一下吧,UIViewlayer树形系统内部被系统维护着三份copy 逻辑树,就是代码可以操纵,例如更改layer属性等等就在这一份 动画树,这是一个中间层,系统正是在这一层更改属性...可以通过纯代码或者xib方式来封装子控件 建立一个跟view相关模型,然后将模型数据传给view,通过模型数据给view子控件赋值 /** * 纯代码初始化控件时一定会走这个方法 */

    2K21

    不懂汇编,如何逆向(iOS)

    $ 写给像我一样小白 0x1 逆向一个APP有哪些步骤(越狱) 砸壳 dump出头文件 分析功能界面 hopper || iDA 分析伪代码 写hook 打包动态库 注入动态库到APP APP重签名...- 可以使用Xcode开发CaptainHook Tweak、Logos Tweak 和 Command-line Tool,越狱机器开发插件,这是原来iOSOpenDev功能迁移和改进。...IDA + Hopper 逆向开发近期学习 我们在这一步目的只是为了搞清楚函数实现和函数之间调用关系, 所以并不需要去直接修改汇编或者二进制代码, 只是反编译出来代码有可能也会带有一下寄存器或者内存地址等一些看不懂信息...: 1) 如何调用已有的类和方法 如果需要使用到类属性或类方法,最好自行创建一个头文件把@interface写进去,然后import这个头文件,写hook时候就可以找到相应属性了,但是如果你想通过这种方式给类添加属性是行不通...下面是一些关键代码,全部代码github:LKMessageSwitchPod 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

    1.6K20

    Runtime运用:埋点统计

    2、渲染时间 UIViewController生命周期中,Viewdidload和Viewdidappear之间时间可以认为是“UI渲染时间”,我们可以通过统计二者之间时间差距来统计页面的渲染时间...方法,每个class导入时候,只要实现了这方法,就会调用而且只调用一次这个方法。...在这两个方法中分别获取当前时间戳,算得时间差就可以获得UI渲染时间。注意从下一个界面返回这个界面时也会调用viewdidappear,需要避免这个统计。...Block Block:某个类将block作为自己属性变量,然后该类block方法体里面又使用了该类本身,简单说就是self.someBlock = ^(Type var){[self dosomething...,则将统计取消,如果没有顺利调用,则说明造成了内存泄漏,从而可以进行统计 五、demo 以上代码可以Github-Monitor下载

    85520

    一个Bug所引发方法交换小讨论

    我们是可以通过类目的方式多个地方勾住ViewController viewDidAppear 和 viewDidDisappear 这两个方法,并进行方法交换,只要交换方法名不一样,就不会有任何问题...但是大家可以比较一下我上面发两段代码,你会发现在两个不同类目中用于交换方法是同名,这就有问题了。 该例子中,体现出来问题就是,这两个地方方法交换都不会起作用。...每一个+load方法都会被调用,无论+load方法是原类中被复写,还是类别中被复写。 一个类+load方法会自动调用其父类+load方法。...具体可以参考:initialize和load调用时机 2,其他一般需要手动调用方法(无论是实例方法还是类方法) 调用该方法时候(运行时)查找。...代码规范 方法交换时候,所要交换方法命名必须关联业务,不要使用普世命名;并且确定命名之后全局搜索一下该方法名,确保唯一。

    60530

    Flutter:浅析flutter-boost原理

    flutter-boost自定义了一个Activity —— BoostFlutterActivity,使用时候会通过NewEngineIntentBuilder创建一个Intent,它build代码...但是目前还没看到url和params是如何被使用,那么回头看BoostFlutterActivityonResume函数,BoostFlutterActivity所有生命周期函数都会调用delegate...对应函数,所以直接看它onResume: public void onResume() { mSyncer.onAppear(); ... } 可以看到一开始就调用了mSyncer...这个函数就是从他继承过来,其生命周期与android中resume类似,所以在这个阶段执行didShowPageContainer,flutter中完成widget切换。...所以可以看到ios原理与android基本类似,也是通过重写承载flutter页面的类,然后通过交互方式通知flutter,flutter中就是单页面切换widget方式,这样就可以使用一个flutter

    1.5K40

    聊聊程序设计思想之面向切面编程AOP

    不修改源代码情况下,通过运行时给程序添加统一功能技术。 其中有两层涵义: * 第一:不修改源代码,即尽可能解耦。...AOP可以通过预编译方式和运行期动态代理实现在不修改源代码情况下给程序动态统一添加功能一种技术。...当然,上述应用范例没有使用AOP情况下,也得到了解决,例如JBoss 3.XXX也提供了上述应用功能,并且没有使用AOP。...那么,有没有什么办法,能让我们需要时候,随意地加入代码呢? 这种在运行时,动态地将代码切入到类指定方法、指定位置编程思想就是面向切面的编程。...其他: Aspectes 会自动标记自己,所有很容易调用栈中查看某个方法是否已经调用: 其中有 PSPDF前缀断点都是Aspectes断点。

    95520

    iOS系统中导航栏转场解决方案与最佳实践

    在业务体量较小情况下,为了满足快速业务迭代,通常会使用硬编码方式来解决这一类“小问题”。...大型 App 导航栏问题就像一个典型“公地悲剧”问题。软件行业,公用代码所有权可以被视作“公地”,因为注重长期需求而容易遭到消耗。...从大方向上来看,美团使用是前面所说第三种方案,不过它也有一些自己独特地方,为了更好让大家理解整个过程,我们设计这样一个场景,从页面 A push 到页面 B,结合之前探讨过方法调用顺序,我们可以知道几个核心方法调用顺序大致如下...页面 B viewDidAppear: push 过程开始,转场库会在页面 A 自身 view 添加一个与导航栏一模一样 NavigationBar 并将真的导航栏隐藏。...当然我们也可以设置,因为这时候页面 A 还持有一个假导航栏,这里还保留着我们之前 viewDidLoad 里写导航栏样式。

    2.4K30
    领券