【问题标题】:Objective C, Correct way to "Call from Main Thread"?Objective C,“从主线程调用”的正确方法?
【发布时间】:2022-01-17 00:42:45
【问题描述】:

我知道大多数人都会使用 dispatchqueue.main.asyncdispatch_async(dispatch_get_main_queue(), ^{,但是从主线程调用 Objective C 的正确方法是什么?

具体来说,我想从查询代码中的主线程调用一个 textfieldview。

例如:

    NSString *qry = [NSString stringWithFormat:                         
                        @"SELECT [ID]        AS Identify          "
                         "     , Number     AS Zeros       "
                         "     , Facils AS Buildings          "
                         "  FROM tableTod                    "
                         "    WHERE Facils ='%@'               "

                     , self.websiteTextField.text
      ];

【问题讨论】:

  • 主队列是对应于主线程的执行队列,所以分派到主队列会运行主线程上的代码。有什么可以阻止你这样做的吗?
  • 该代码的语法行是什么?
  • 这是您在上面发布的语法:dispatch_async(dispatch_get_main_queue(), ^{ ... }) 您要在主线程上运行的代码进入块内部 (^{ ... })
  • 顺便说一句,使用%@ 模式将值插入SQL 是不谨慎的。如果websiteTextField.text 值中有' 怎么办? SQL 将突然不再有效。相反,您应该在 SQL 中使用 ? 占位符,然后将值绑定到这些占位符。在 SQLite 中,请参阅 herehere。这些是INSERT 语句,但SELECT 语句也是如此,例如SELECT … FROM tableTod WHERE Facils = ?? 周围没有任何引号)。
  • 扩展@Rob 的观点:这可能是一个SQL 注入漏洞。有关更多信息,请参阅bobby-tables.com

标签: ios objective-c multithreading exception call


【解决方案1】:

答案:

我通过实现调度异步代码找到了解决方案。这不是 SQL 注入。谢谢。

【讨论】:

  • 显然是一个SQL注入漏洞。
  • 尝试搜索带有撇号的字符串(带有简单' 的字符串)。当您准备 SQL 时,它将失败。同样,当您准备格式错误的 SQL 语句时,SQL 注入攻击比简单的错误更不是问题。使用? 占位符并绑定值将避免该问题。诚然,这与您的“主线程/队列”问题无关,但要牢记这一点。如果您不采用此 ? 占位符和绑定值,您最终后悔。仅仅因为你解决了你的主线程问题并不意味着你没有更深层次的 SQL 问题。
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
相关资源
最近更新 更多