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

在会话控制器在rails中销毁current_account之后,为什么它不是nil呢?

在Rails中,会话控制器(Session Controller)负责处理用户会话的创建、销毁和管理。当销毁current_account之后,current_account并不会立即变为nil的原因可能有以下几点:

  1. 会话控制器的销毁操作可能是异步执行的:在Rails中,会话控制器的销毁操作可能是通过后台任务或其他异步方式执行的。因此,即使销毁了current_account,但在当前执行的代码中,current_account可能还没有被更新为nil。
  2. current_account可能被其他地方引用:current_account可能被其他地方引用,导致即使在会话控制器中销毁了它,它仍然存在于内存中。这可能是因为其他代码或模块仍在使用current_account,或者current_account被存储在缓存中。
  3. 销毁操作可能存在延迟:在Rails中,销毁操作可能存在一定的延迟。即使调用了销毁方法,但实际的销毁操作可能会在稍后的时间点执行。因此,在销毁current_account之后,它可能仍然存在于内存中,直到销毁操作真正完成。

为了确保current_account在会话控制器销毁后为nil,可以采取以下措施:

  1. 确保销毁操作是同步执行的:可以通过使用同步的销毁方法,确保销毁操作立即生效,而不是异步执行。例如,在Rails中可以使用reset_session方法来销毁会话并重置会话数据。
  2. 确保没有其他地方引用current_account:在销毁current_account之前,需要确保没有其他地方引用它。可以通过查找代码中对current_account的引用,并适时进行清理或更新。
  3. 确保销毁操作完成后再进行后续操作:在销毁current_account之后,可以添加适当的等待或延迟,以确保销毁操作真正完成后再进行后续操作。可以使用Rails提供的回调或钩子函数,在销毁操作完成后执行相应的代码。

需要注意的是,以上提到的解决措施是一般性的建议,并不针对具体的代码实现。具体情况可能因代码结构、框架版本等因素而有所不同。在实际开发中,需要根据具体情况进行调试和排查,以确保current_account在会话控制器销毁后为nil。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

起因 我们经常能够第三方库的源码中看到很多loadView、willMoveToParentViewController:、viewDidLayoutSubviews 等等诸如此类的并不是十分常见的方法...UIViewController类提供一些方法,用来判断为什么view外观发生更改。...: isMovingFromParentViewController 会在viewWillDisappear & viewDidDisappear 方法内部调用这个方法判断视图控制器的视图的隐藏是否因为视图控制器的容器视图控制器移除...View的生命周期 我们知道view的创建有init(或new或者跟类名一样的)的方法,销毁时会自动执行dealloc方法,但是UIView的生命周期到底是怎样的?...实际开发为了写的少点,都会写在基类控制器。 官方说,iOS 6.0以后系统就不会自动清理,需要手动清理。

1.3K30

RAC(ReactiveCocoa)介绍(七)——信号销毁

这一篇讲主要针对RACSignal信号销毁进行探究 RACSignal信号发送命令执行之后,本着谁创建谁销毁的原则,最后一步必须要进行销毁操作。...而销毁操作的执行则由RACDisposable类来完成。 RACDisposable类RAC作为一个父类,由三种子类继承自。...那么,判断局部变量disposeBlock不为nil,意味着还存在销毁者,还不需要执行销毁操作,则继续执行disposeBlock( ),即销毁信号block的代码块。...扩展一下: 控制器创建销毁信号时,若创建了一个RACDisposable类的成员变量,将其放入销毁信号return。...因为持有该销毁信号对象的是当前类,RAC信号销毁过程内部方法无法对其进行销毁操作,最终会导致内存泄漏问题 ? 销毁信号使用成员变量而非临时变量,导致的内存泄漏

2.1K20

如何使用RVMFreeBSD 10.1上安装Ruby on Rails

介绍 Ruby on Rails,简称RoR,是一个用Ruby编写的非常流行的全栈Web应用程序开发框架。允许您快速开发符合MVC(模型 - 视图 - 控制器)模式的Web应用程序。...由于RVMbash 3.2.25或更高版本效果最佳,因此在此步骤,我们将安装bash并将其设置为默认shell。 开始之前,请登录FreeBSD 10.1服务器。...bash installer.sh stable 由于RVMshell的启动配置中进行了一些更改,因此激活这些更改的推荐方法是注销当前会话并重新登录。...sudo pkg install node-devel 第5步 - 创建测试项目 现在Rails安装完成了,让我们通过/tmp目录创建一个空项目来测试。...exit 结论 本教程,您学习了如何在FreeBSD 10.1服务器上设置Ruby on Rails。您现在可以使用FreeBSD服务器作为Rails项目的开发环境!

4.5K10

浅谈 iOS ARC 内存管理

为什么访问 weak 修饰的对象就会访问注册到自动释放池的对象? 因为 weak 不会引起对象的引用计数器变化,因此,该对象在运行过程很有可能会被释放。...当参数被作为返回值 return 之后,接收方如果要接着使用它就需要强引用它,使 retainCount +1,用完后再清理,使 retainCount -1。有持有就有清理,这是接收方的责任。...方法创建了对象并作为返回值时,一方面你创建了这个对象你就得负责释放,有创建就有释放,这是创建者的责任。...Pool 自己销毁的时候会把里面的对象都顺手清理掉,从而保证了对象会被释放。...会不会在 Autorelease Pool 都销毁了,接收方还没接收到对象

1.4K41

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

,此处需要对你init和viewDidLoad创建的对象进行释放 关于viewDidUnload:发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话,viewDidUnload将会被执行...,本视图的所有子视图将被销毁,以释放内存, 此时开发者需要手动对viewLoad、viewDidLoad创建的对象释放内存。...另外,即使设备上按了Home键之后,系统也不一定会调用这个方法,因为IOS4之后,系统允许将APP在后台挂起,并将其继续滞留在内存,因此,viewcontroller并不会调用这个方法来清除内存。...loadView 此方法控制器的view为nil的时候被调用。 此方法用于以编程的方式创建view的时候用到。...如果的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release, loadView方法将被再次调用来创建一个新的view。

1.4K110

徒手教你使用zookeeper编写服务发现

这个时间是会话的过期时间,创建会话的时候客户端会提供这个参数,一般是10到30秒。 也许你会问连接断开了,服务器是可以感知到的,为什么需要客户端主动发送关闭消息?...为了避免这种情况下反复创建和销毁复杂的会话对象以及创建会话后要进行的一系列事件初始化操作,服务器会尽量延长会话的生存时间。...因为会话没有关闭,之前创建的临时节点还存在,但是这个时候客户端却无法识别去这个临时节点是不是自己创建的,因为节点内部并不存储会话ID字段。...因为获取字节点名称和获取字节点内容不是一个原子操作,所以调用Get获取内容时可能会出现节点不存在错误,这是正常现象。 将以上代码凑在一起,一个简单的服务发现包装就实现了。...Close方法,否则zookeeper的会话不会立即关闭,服务器创建的临时节点也就不会立即消失,而是要等到timeout之后服务器才会清理。

85310

iOS 内存管理相关面试题

是直接从内存取数值,因为它是从内存取得数据,并没有一个加锁的保护来用于cpu的寄存器计算Value,只是单纯的从内存地址,当前的内存存储的数据结果来进行使用。...3.4 强指针(strong)、弱指针(weak) strong strong 系统一般不会自动释放, oc ,对象默认为强指针。作用域销毁销毁引用。...相反,如果这N个指针都是弱引用,这个对象马上就被释放 使用 sb 或者 xib 给控件拖线的时候,为什么拖出来的先属性都是用 weak 修饰?...关于图片占用内存管理 4.1 图片加载占用内存对比 使用 imageName: 加载图片: 加载到内存当中后,占据内存空间较大 相同的图片,图片不会重复加载 加载内存当中之后,会一直停留在内存当中,不会随着对象销毁销毁...通常在调用完release方法后,会把保存了对象指针地址的变量清空,赋值为nil oc没有空指针异常,所以使用[nil retain]调用方法不会导致异常的发生 内存泄漏有几种情况?

1.5K30

iOS AFNetworking 源码阅读三

不是请求网络的线程并发数。请求网络是由NSURLSession来做的,内部维护了一个线程池,用来做网络请求。调度线程,基于底层的CFSocket去发送请求和接收数据。这些线程是并发的。...明确了这个概念之后,我们来梳理一下AF的整个流程和线程的关系: ● 一开始初始化sessionManager的时候,一般都是主线程。...● 然后我们调用NSUrlSession的resume,接着就跑到NSUrlSession内部去对网络进行数据请求了,内部是多线程并发的去请求数据的。...● 紧接着数据请求完成后,回调回来我们一开始生成的并发数为1的NSOperationQueue,这个时候会是多线程串行的回调回来的。...最后我们来解释解释为什么回调Queue要设置并发数为1: 我认为AF这么做有以下两点原因: 1.众所周知,AF2.x所有的回调是一条线程,这条线程是AF的常驻线程,而这一条线程正是AF调度request

85840

Groovy on Grails 交流活动

“脚手架功能需要我每次改变后生成。”“脚手架” 即是可以自动生成控制器和视图之增删改代码的样板控制器。对控制器和视图的显式重建通常毫无必要,除非你不愿应用动态脚手架的功能。...为什么不来听听其他用户对于免 FUD 编程和双倍的 web 应用开发速度的谈论,Grails2007 交流大会即将开始,门票正火热销售。...如果你的某一位同事指出,你写的满满一页代码可以用短短几行 Groovy 语句完成,那么你翻起这本书的原因就不该仅仅是因为上口的名字。好,到底为什么要学 Groovy ,你又能从中获得些什么?...,正慢慢回味这整个过程语言特性的使用。...而一切都是从这个 Groovy 的故事开始的:为什么要创造 Groovy,的设计是怎样的,它在语言大家族里面又处于怎样的地位

1.7K20

一篇搞懂容器技术的基石: cgroup

对于容器技术而言,实现资源层面上的限制和隔离,依赖于 Linux 内核所提供的 cgroup 和 namespace 技术。...当在 cgroup.subtree_control 中指定多个控制器时,要么全部成功,要么全部失败。同一个控制器上指定多项操作,那么只有最后一个生效。...每个 cgroup 的控制器销毁是异步的,引用时同样也有着延迟引用的问题; 所有 cgroup 核心接口文件都以 cgroup 为前缀。每个控制器的接口文件都以控制器名称和一个点为前缀。...一旦被委派,用户就可以目录下建立子层次结构,所有的资源分配都受父节点的制约。目前,cgroup 对委托子层次结构的 cgroup 数量或嵌套深度没有任何限制(之后可能会受到明确限制)。...为什么 User0 想将进程 从 cgroup3 迁移至 cgroup5会失败? 这是由于 User0 的权限只到 cgroup1 和 cgroup2 层,并不具备 cgroup0 的权限。

1.6K41

KVO 正确使用姿势进阶及底层实现你要知道的KVC、KVO、Delegate、Notification都在这里

首先,讲解一下为什么要在对象被销毁前删除监听器,我们开发中使用KVO时很可能会遇到因为没有删除监听器而产生的野指针错误。...KVO注册监听器的时候不会持有监听器对象的引用,也不会像weak那样监听器对象被销毁时置nil,而是仅仅保留监听器对象的地址,类似于copy修饰符,当监听器对象被销毁而又没有删除监听器时,如果这个时候被监听对象的值发生变化系统会执行监听器的回调函数...上面这个栗子产生的野指针错误正是因为KVO使用不正确,可能有些读者没有监听器销毁前删除监听器也没有发生过任何异常,因此不太注意,但KVO正确使用姿势一定是监听器对象销毁前删除监听器。...context是一个id类型的参数,注册监听器时可以传入该参数,回调函数中会回传该参数,因此,该参数就能完美的解决上述两个问题。那context这个id类型的参数设置为什么值比较合适?...如果有继承关系,监听器回调函数中将不是当前类处理的context调用父类的监听器回调函数进行处理。 删除监听器时需要注意不要重复删除,尽量使用context删除。

1.5K80

彻底搞懂容器技术的基石: cgroup

为什么要关注 cgroup & namespace 云原生/容器技术的井喷式增长 自 1979年,Unix 版本7 开发过程引入 Chroot Jail 以及 Chroot 系统调用开始,直到 2013...当在 cgroup.subtree_control 中指定多个控制器时,要么全部成功,要么全部失败。同一个控制器上指定多项操作,那么只有最后一个生效。...每个 cgroup 的控制器销毁是异步的,引用时同样也有着延迟引用的问题; 所有 cgroup 核心接口文件都以 cgroup 为前缀。每个控制器的接口文件都以控制器名称和一个点为前缀。...一旦被委派,用户就可以目录下建立子层次结构,所有的资源分配都受父节点的制约。目前,cgroup 对委托子层次结构的 cgroup 数量或嵌套深度没有任何限制(之后可能会受到明确限制)。...为什么 User0 想将进程 从 cgroup3 迁移至 cgroup5会失败? 这是由于 User0 的权限只到 cgroup1 和 cgroup2 层,并不具备 cgroup0 的权限。

1.9K31

三分钟让你了解什么是Web开发?

为什么HTTP ? 最初,这些信息都是作为文本存储的——这就是为什么现在文本、媒体和文件都通过该协议进行交换的情况下,名称超文本传输协议仍然存在。 2、如何保存、检索和保存信息?...为了克服这种无状态性,客户需要在每个请求中发送额外的信息,以多个请求期间保留会话信息。这些额外的信息存储cookie的客户端,会话的服务器端。 会话是一个数组变量,存储跨多个页面使用的信息。...会话由惟一ID标识,其名称依赖于编程语言——PHP称为“PHP会话ID”。客户端浏览器,需要将相同的会话ID存储为cookie。 显示个人博客 我们的下一个项目是展示个人博客帖子。...Controller:第三部分,如果我们点击视图后链接,控制器将被调用。它从模型获取数据,并使用该数据呈现视图。 这里的blogpost是控制器名称,视图是控制器的一个操作(方法)。...如果我们浏览器输入这个,请求就会转到“BlogPost”控制器的动作“视图”,在这里调用这个模型来获取BlogPost ID“1”作为模型对象的内容。这个对象被传递给“视图”来呈现

5.7K30

关于 循环引用问题

官方文档 block是一个对象,创建时内存默认分配在栈上,不是堆上,所以的作用域仅限创建时候的当前上下文(函数, 方法...), 当我们该作用域外调用该block时, 程序就会崩溃....5s内的时间,该控制器pop到上一级,该控制器执行dealloc方法被销毁,内存被提前释放,从而weakself.str即为null。...解决方法(手动释放): [_timer invalidate]; _timer = nil; 注意:有人把销毁_timer的方法放在dealloc里,感觉就是自我安慰,循环引用造成不调用dealloc...原理:MLeaksFinder是从UIViewController入手的,UIViewControllerPOP或dismiss之后控制器及其上的view,view的subviews都会被释放掉,MleaksFinder...就是控制器POP或dismiss之后去查看该控制器和其上的view是否都被释放掉。

3.2K20

绕过GitHub的OAuth授权验证机制($25000)

Rails 路由能够识别 URL 地址,并把它们分派给控制器动作或 Rack 应用进行处理。它还能生成路径和 URL 地址,从而避免视图中硬编码字符串。...所以Rails以及其它的一些网络框架采用了一个聪明的技巧:试图将HEAD请求路由到与GET请求相同的地方,然后运行控制器代码,以此省略掉消息响应体。...这看上去很好,但却是一个漏洞百出的抽象概念,如果此时控制器发出request.get?的请求,对于这样的请求,因为现在控制器是HEAD请求,而不是GET请求,所以将会返回false。...前面我们说过,Rails路由会把当成GET请求来处理,所以它会被发送到控制器。...但当HEAD请求到达控制器后,控制器会意识到这不是一个GET请求,所以控制器会检查它是否是一个经过授权验证的POST请求,之后, GitHub会找到请求中指定OAuth授权流程的APP,并给予相应的访问授权

2.7K10

从零开始配置vim(21)——会话管理

很多代码编辑器都有这么一个功能,重新进入编辑器之后能恢复上次打开的所有文件,窗口布局,有的甚至是上次设置的一些配置。那么vim是否也可以实现这样的功能?答案是肯定的。...其实就是一个vim脚本,跟我们写的配置是一回事 接着我们试着终端输入 nvim 不带任何参数,直接打开我们的欢迎界面,该界面输入 :source Session.vim 。...有时我们在编辑项目之后又重新打开vim编辑了另外一些内容,这个时候就有可能发生覆盖行为,把我们项目相关的内容给覆盖掉了,那这个时候该怎么办?...既然Session.vim 是一个vim脚本,为什么不把所有设置都写在配置文件里面?...= nil }) 我们可以 lualine 的配置文件 sections 一节添加 lualine_c = {require('auto-session-library').current_session_name

78310

iOS的MVC框架之控制层的构建(下)

当出现问题时我们首先应该反思的是自己哪里不对而不是去怪别人哪里不对。(这个鸡汤撒得真LOW!!) 怎么解决上面所说的导致C层膨胀的几个问题?这也是这篇文章所要重点介绍的。...)、视图将要从窗口删除(viewWillDisappear)、视图已经从窗口删除(viewDidDisappear)、视图被销毁(viewDidUnload,这个方法iOS6.0以后将不起作用了)、控制器销毁...iOS6以后的控制器只提供了视图构建以及构建完成的模板方法,但却不再提供视图被销毁之前或者之后的模板方法,因此我们loadView以及viewDidLoad添加代码时就一定要考虑到这么一点,因为他不像其他的方法一样提供了互逆处理的机制...我们其实可以花一点时间静下心来好好的去研究一下,而不是一味的去拒绝和抵触。君不见Android的开发者还是喜欢通过XML并且基本是通过XML的编写来完成界面布局的。...没有关系,本文探讨的是如何解决控制器代码膨胀的问题,而不是掀起派系之争。那么如果我就是要通过代码的方式来完成界面布局?毕竟通过代码布局的方式更加灵活和可配置性(牺牲了所见即所得性)。

4.4K30
领券