可以保留 ASIHTTPRequest 委托吗?

2024-03-05

保留子类的委托可以吗ASIHTTPRequest?

我做了一个子类ASIHTTPRequest called JSONRequest。每个实例JSONRequest是它自己的委托,处理回调,并将它们传递给jsonDelegate,这是一个私有财产JSONRequest,并响应requestFinished:withResult:,其中结果是NSDictionaryJSON 响应的表示形式。为此,我超载了setDelegate: in JSONRequest to do super.delegate = self; self.jsonDelegate = newDelegate.

保留可以吗jsonDelegate在这种情况下,因为经常jsonDelegate是一个视图控制器,如果用户点击“后退”等,在加载请求时有时会释放它。我将释放jsonDelegate in JSONRequest调用回调方法后。

我怎么知道这没问题并且不会导致保留循环 https://stackoverflow.com/questions/918698/why-are-objective-c-delegates-usually-given-the-property-assign-instead-of-retain/918727#918727.


什么保留了请求? (也许是操作队列?谁知道呢?)

一般来说,您似乎提出的“即发即忘并给我回调”方法是一个坏主意。如果除了请求之外没有任何东西保留 VC,那么(除非您的应用程序结构有点愚蠢)VC 将永远不会对其接收到的数据执行任何操作,因此没有理由继续。

这也让人感觉不对:是请求拥有 VC,还是 VC 拥有请求?我希望是后者,所以 VC 也应该保留该请求。

有一些例外:

  • CAAnimation.delegate 被保留,大概是因为动画将在某个时刻完成(我不确定如果它是重复动画会发生什么)。 UIKit 的动画委托也是如此
  • NSTimer 保留了它的目标,可能是因为 NSInitation 保留了它的目标。 (我编写了一个“弱计时器”类来解决这个问题。)
  • CADisplayLink 保留其目标,大概类似于 NSTimer。

对于这些情况,我经常使用不保留其目标的“弱代理”类来解决它(并且我围绕 NSTimer/CADisplayLink 编写了一个“弱计时器”包装器,以使这更容易一些。)

你是什​​么supposed要做的就是跟踪您发起的请求,并在 dealloc 中执行类似的操作

request.delegate = nil;
[request cancel];
self.request = nil;

同样,您应该在适当的时间取消注册通知/操作/KVO 回调。有一个例外:

  • 如果您确定释放后它不会向您发送回调,则无需打扰,因此不需要清除文本字段委托和按钮操作/目标。

例外也有例外:

  • UIWebView(至少在较旧的操作系统中)也被其他东西保留,可能与网络线程有关。如果 VC 在 Web 视图仍在加载时消失,它可能会崩溃。
  • UIScrollView 滚动回调还会导致视图在 VC 的生命周期结束后保留​​。您可以通过例如测试这一点按住“完成”并在释放“完成”时开始轻弹。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以保留 ASIHTTPRequest 委托吗? 的相关文章

  • 如何在 UILabel.text 中添加制表符空间

    我有一个 UILabel 实例 比如 mylabel 我想做的是这样的 mylabel text Age tLimit tYear instead of mylabel text Age Limit Year 但当我尝试时 t 未被识别 如
  • 在 xcode 中使用线程调用函数

    我在 xcode 中创建了一个线程 并且给出了从该线程调用的函数名称 但我的问题是 给 call 的函数名称没有被调用 知道何时在该函数中放置断点 code NSThread myThread myThread start self per
  • 循环缓冲区录音 iOS:可能吗?

    我的一个客户想要连续录制音频 当他单击 提交 时 他只想提交最后 10 秒的内容 所以他想要连续记录并且只保留最后 x 秒 我认为这需要类似循环缓冲区的东西 但是 作为 iOS 的新手 它看起来像AVAudioRecorder只能写入文件
  • AVPlayerLayer获取图像到UIImageView缓冲区

    我尝试 playerLayer renderInContext UIGraphicsGetCurrentContext 它将显示黑色背景 所以我得到当前播放器项目作为连续的重击图像 它看起来不像视频播放 只是静态图像连续流动 那么还有其他选
  • 保存录制的 AVAudioRecorder 声音文件:现在怎么办? (iOS、Xcode 4)

    在我的应用程序中 我希望用户能够录制一个声音文件并播放它 然后保存该声音文件以供以后使用 我用了本教程 http www techotopia com index php Recording Audio on an iPhone with
  • 创建类似于邮件应用程序菜单的 iPhone 弹出菜单

    当您想要回复消息时 我想创建一个类似于邮件应用程序中的弹出菜单 我在多个应用程序中看到过这一点 所以我不确定框架中是否内置了某些内容或一些示例代码 在 Swift 中创建操作表 代码已使用 Swift 5 进行测试 从 iOS 8 开始 U
  • iPhone iOS 保存从 UIImageJPEGRepresentation() 获得的数据第二次失败:ImageIO: CGImageRead_mapData 'open' failed

    我的 UIImage 操作遇到了一个奇怪的问题 我正在进行保管箱同步 并且必须将我的图像存储为本地文件 为此 我使用以下命令保存它们UIImagePNGRepresentation image or UIImageJPEGRepresent
  • Objective-C:在哪里定义宏以便随处可用?

    我有一个 iOS 应用程序 它在许多视图控制器中使用相同的字符串 数字等 所以我认为最好在一个文件中定义这些常量并在所有视图控制器实现中使用它 优点是更改一个数字 我只需要做一次 而不是在所有视图控制器中都使用该数字 实际上 我的 h 文件
  • 是否有针对不同屏幕尺寸的单独故事板?

    基本上我已经完成了一个应用程序 我唯一的问题是 ATM 机应用程序在设计时只考虑了 4 英寸显示屏 当在 3 5 英寸模拟器上运行时 应用程序会丢失 0 5 英寸 显然 那么我的问题是 如何在 Xcode 5 中为不同的屏幕尺寸设置不同的故
  • 使用 iPhone 中的地图视图读取当前位置名称

    我读取了当前位置的纬度和经度值 然后成功将该位置固定在 iPhone 中 现在我想使用这个纬度和经度值读取该地名 我使用以下代码来读取查找当前位置 void mapView MKMapView mapView1 didUpdateUserL
  • UIPanGestureRecognizer 对坐标的限制

    我在主 UIView 中添加了一个子视图 称为panel 并且我向其中添加了gestureRecognizer 因为我希望它只能在Y轴上拖动并且只能在某些限制下 即160 300 超过300它不能拖动 我以这种方式实现了手势处理 IBAct
  • 有什么方法可以询问方法的名称吗?

    我正在尝试调试我正在开发的 iPhone 应用程序 向各种源文件添加 50 条 NSLog 语句的想法让我感到很兴奋 我想做的是写一对陈述 比如 NSString methodName self methodName NSLog metho
  • BigQuery 未显示链接的 Firebase Analytics 事件日志的任何数据集

    我将我的帐户链接到 Big Query 但 Firebase Analytics 事件不会自动加载到 BigQuery 中 显示 未找到数据集 警告 我的工作进度附在下面 请查收 I have getting firebase Analyt
  • Objective-C 中是否有相当于 C++ 动态转换的功能?

    如果我有两个类 子类和超类 SuperClass super new SuperClass SubClass sub new SubClass SubClass sub pointer The nice one line cast belo
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • iOS 7 tabBar 横线,如何去掉?

    Apple 在 iOS 7 中的 tabBar 上添加了一条细线 该线应该在 tabBar 和 UI 之间起到阴影或淡入淡出的作用 由于我使用的是定制的 tabBar 这条线非常令人恼火 你如何删除它 请告诉我这是可能的 否则我需要重新设计
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • 在 Objective-C 中的 Swift 类上调用 NSStringFromClass 返回模块损坏的名称

    我知道这个问题 https stackoverflow com questions 24107658 get a user readable version of the class name in swift in objc nsstri
  • 使用带有非静态方法的委托[没有选择的答案]

    我非常有信心我应该能够使用带有非静态方法的委托 但是下面给了我一个错误 public class TestClass private delegate void TestDelegate TestDelegate testDelegate

随机推荐