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

NSLocking的使用总是应该包含在@ try/@中吗?

在使用NSLocking时,建议将其放在@try/@catch块中。这样可以确保在锁定操作期间发生异常时,程序能够正确处理异常,避免死锁或其他问题。

例如:

代码语言:txt
复制
@try {
    [lock lock];
    // 执行需要锁定的代码
}
@finally {
    [lock unlock];
}

这样可以确保在锁定操作期间发生异常时,程序能够正确处理异常,避免死锁或其他问题。

但是,这并不是绝对的。在某些情况下,可能不需要使用@try/@catch块。例如,如果锁定操作本身不会引发异常,或者如果锁定操作失败时,程序可以安全地继续执行,则不需要使用@try/@catch块。

总之,在使用NSLocking时,建议将其放在@try/@catch块中,以确保程序能够正确处理异常。

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

相关·内容

我应该提交 vendor 目录中的依赖包吗

vendor 目录(或者你安装依赖的其它目录)都应该被添加进 .gitignore/svn:ignore/等等。最好这么做,然后让所有开发人员使用 Composer 来安装依赖包。...在你自己的 VCS(代码管理工具) 中将产生与你依赖的资源包重复的历史记录。通过 git 的一个 git 仓库安装添加依赖,将把它们视作子模块。...使用 --prefer-dist 或在 config 选项中设置 preferred-install 为 dist。...在每一个依赖安装后删除其下的 .git 文件夹,然后你就可以添加它们到你的 git repo 中。...通过上面的文字内容,我们知道在使用 Composer 项目的时候,我们不要把 vendor 中的内容也提交到代码管理库中,而应该使用 Composer 自己在运行的时候下载。

13110

iOS 多线程之线程锁Swift-Demo示例总结

lock() public func unlock() } open class NSLock : NSObject, NSLocking { open func `try...下面是我们Demo中具体的使用的例子代码: var imageMutableArray:Array = Array.init() let lock = NSLock.init(...使用递归锁可以在一个线程中反复获取锁而不造成死锁,在这个过程中也会记录获取锁和释放锁的次数,只有等两者平衡的时候才会释放,下面是我们Demo中的示例:        // 递归调用 func...但我们是在Swift中来讨论线程锁的,这里也就不能再使用 @synchronized,因为在Swift中它是不在使用了的,相应代替它的是下面下面这两句:objc_sync_enter()  中间是你需要加锁的代码...你要是在OC的文件中只用的话你需要导入头文件:pthread.h 在Swift中就不用了,但是在使用的时候不管是OC的还是Swift的,代码是一致的,它的几个主要的方法就是下面三个,剩下的具体的代码可以看

3.2K81
  • 异步函数中的异常处理及测试方法

    / 可以在 Javascript 的异步函数中抛出错误吗?...测试异常 所以你应该知道什么是 Javascript 的异步函数,对吗?先看一段代码: ? 假设你要添加异步方法来获取有关该人的数据。这种方法需要一个网址。...错误被包含在了Promise rejection中。 换句话说,我不能使用 assert.throws 来测试它。 让我们通过测试来验证一下: ? 测试失败了! ? 有没有悟出点什么?...(或者将方法包装在try/catch中)。被拒绝的Promise将会在堆栈中传播,除非你抓住(catch)它。 至于测试代码,应该这样写: ?...异步函数和异步方法总是返回一个Promise,无论是已解决还是被拒绝。 要拦截异步函数中的异常,必须使用catch()。

    3K30

    解决“0xc000007b无法正常启动”

    如果Visual C编译器编译的代码是直接C,为什么需要可再发行的包?这会使您的代码平台依赖吗?使用带有可再发行组件包的visual C编译器是否比使用另一个IDE和g?...代码不依赖于平台,生成的可执行文件是.它使用标准库实现链接到MS库,它们作为DLL包含在可再发行组件中....IIRC应该有一个静态链接所有内容的选项,这样你就不需要额外的可再发行组件了,但是生成的二进制文件仍然依赖于平台 – 如果Visual C编译器编译的代码是直接C,为什么需要可再发行的包?...这会使您的代码平台依赖吗?使用带有可再发行组件包的visual C编译器是否比使用另一个IDE和g?...解决方法 代码不依赖于平台,生成的可执行文件是.它使用标准库实现链接到MS库,它们作为DLL包含在可再发行组件中.

    93030

    抛弃VS Code,我还能用啥编辑器?| 技术头条

    它提供以DEB、RPM和Snap包的形式使用的二进制文件,让你可以很轻松地在Linux上安装VS Code。...你可以在VS Code中禁用遥测,但你完全信任Microsoft吗?如果答案是否定的,那么你有什么其它选择? 你可以从源代码构建它,从而保持所有内容都是开源的。...但是,从源代码安装并不总是最好的选择,特别是在当今世界,我们已经习惯了使用二进制文件。 另一种选择是使用VSCodium! VSCodium: 100%开源的Microsoft VS Code ?...这是第一次在Ubuntu中并排运行VS Code和VSCodium的截图。你能区分哪个是VS Code和VSCodium吗? ? 如果你不能区分出来,可以看看底部。 ?...我认为,致力于开源的Linux发行版甚至可能已经开始将VSCodium包含在其官方存储库中。 你的看法如何?是否值得切换到VSCodium,或者你是否愿意无视微软的遥测报告而继续使用VS Code?

    1K20

    通过异常处理错误(5):异常的限制、构造器

    这里使用了java标准输入/输出库中的FileReader和BufferedReader类,这些类的基本用法很简单,应该很容易明白:  import java.io.BufferedReader; import...在try块中,会使用此文件名建立了FileReader对象。FileReader对象本身用处并不大,但可以用它来建立BufferedReader对象。...在这中方式中,finally子句在构造失败时是不会执行的,而在构造成功时将总是执行。     ...为了正确处理这种情况,事情变得很棘手,因为对于每一个构造,都必须包含在其自己的try-finally语句块中,并且每一个对象构造必须都跟随一个try-finally语句块以确保清理。     ...本例中的异常处理的棘手程度,对于应该创建不能失败的构造器是一个有力的论据,尽管这么做并非总是可行。      注意,如果dispose()可以抛出异常,那么你可能需要额外的try语句块。

    49320

    iOS_Objective-C编程规范

    如果已经在文件头部详细描述了接口,可以直接说明 “完整的描述请参见文件头部”。 对外暴露的所有接口都应该有注释来解释它的作用、参数、返回值。 对外暴露的接口应该在注释中说明线程安全性。...4.5 【必须】使用轻量级泛型来记录容器的类型 // 使用 Xcode 7 及以上版本的所有项目都应该使用 Objective-C 轻量级泛型表示法来表明容器包含的对象。...鉴于使用异常的代价较高(安装包、退堆栈带来的性能开销,此外还可能引发内存泄露),条件允许时,应该优先使用 NSError 对象或者返回错误码形式,但对于第三方组件的代码,在使用时,应使用 @try/@catch...,都应该使用字面量。...建议在界面布局时使用相对布局,例如: 使用目标view在父view中的相对位置 使用目标view与相关view中的相对位置 使用目标view与相邻view中的相对位置 当访问一个 CGRect 的

    71220

    【深度剖析】JavaScript中块级作用域与函数作用域

    面试官必问系列:深入理解JavaScript块和函数作用域 • 在 JavaScript 中,究竟是什么会生成一个新的作用域,只有函数才会生成新的作用域吗?...那 JavaScript 其他结构能生成新的作用域吗? 3.1 函数中的作用域 • 在之前的词法作用域中可见 JavaScript 具有基于函数的作用域,这也就意味着一个函数都会创建一个新的作用域。...); console.log(a); // 2 • 第一种形式中函数表达式被包含在 ( ) 中,然后在后面用另一个 () 括号来调用。...垃圾收集 • 另一个块作用域很有用的原因和闭包中的内存垃圾回收机制相关。...let 不仅将 i 绑定了for 循环内部的块中,事实上他将其重新绑定到了循环的每一次迭代中,确保使用上一个循环迭代结束时的值重新进行赋值。

    29210

    mysql前缀索引使用,Mysql:前缀索引与索引

    大家好,又见面了,我是你们的朋友全栈君。 可以像普通索引一样使用mysql前缀索引吗?...前缀索引的排序不超出前缀的长度.如果您的查询使用完整索引来查找行,您通常会发现返回的行是按索引顺序隐式排序的.如果您的应用程序需要这种行为,那么它当然会期待它不应该期望的东西,因为除非您显式ORDER...并且,前缀索引不能用作覆盖索引.覆盖索引是指SELECT中的所有列恰好包含在一个索引中的情况(加上可选的主键,因为它也总是存在).优化器将直接从索引读取数据,而不是使用索引来标识要在主表数据中查找的行....(顺便说一下,这个功能应该足以选择你想要的列,而不是懒惰的SELECT * – 它可能会打开一些更有效的查询计划).前缀索引也不能用于此....但是除了性能,优化和查询隐含地做你期望的事情(你不应该期待)之外,没有与前缀索引想到的逻辑相关的警告.结果仍然是正确的.

    5.3K20

    Java 异常处理的 9 个最佳实践

    1、在 Finally 清理资源或者使用 Try-With-Resource 特性 大部分情况下,在 try 代码块中使用资源后需要关闭资源,例如 InputStream 。...所以,你应该把清理工作的代码放到 finally 里去,或者使用 try-with-resource 特性。...使用 Finally 代码块 与前面几行 try 代码块不同,finally 代码块总是会被执行。不管 try 代码块成功执行之后还是你在 catch 代码块中处理完异常后都会执行。...3、记录指定的异常 每当你在方法签名中指定异常,你也应该在 Javadoc 中记录它。 这与上一个最佳实践具有相同的目标:尽可能多地向调用者提供信息,以便避免或处理异常。...总是优先捕获最具体的异常类,并将不太具体的 catch 块添加到列表的末尾。 你可以在下面的代码片断中看到这样一个 try-catch 语句的例子。

    81390

    C++ 异常机制分析

    其语法为: throw 表达式; throw语句必须包含在try块中,也可以是被包含在调用栈的外层函数的try块中,如: //示例代码:throw包含在外层函数的try块中 void registerScore...(int score) { if (score > 100 || score < 0) throw score; //throw语句被包含在外层main的try语句块中...所以,派生类的处理代码catch语句应该放在基类的处理catch语句之前,否则先匹配上的总是参数类型为基类的catch语句,而能够精确匹配的catch语句却不能够被匹配上。...使用catch(...){}可以捕获所有类型的异常,根据最先匹配原则,catch(...){}应该放在所有catch语句的最后面,否则无法让其他可以精确匹配的catch语句得到匹配。...构造函数没有返回值,所以应该使用异常机制来报告发生的问题。

    1.8K61

    使用 Mapbox 在 Vue 中开发一个地理信息定位应用

    我们还添加了一个导航栏来提升我们应用的美感。 我们需要一个 .env 文件来加载环境变量。 继续在项目文件夹的根目录中添加一个。 安装所需的包和库 接下来,我们需要安装所需的库。...这是我们将用于此项目的列表: Mapbox GL JS Mapbox-gl-geocoder Dotenv Axios 根据你首选的包管理器在 CLI 中安装包。...我们需要一个元素来容纳我们的地图,一个区域来显示坐标,同时监听标记在地图上的移动,以及在我们调用反向地理编码 API 时显示位置的东西。 我们可以将所有这些都包含在一个卡片组件中。...{{ center[0] }} Longitude: {{ center[1] }} 还记得我们如何总是在事件发生后更新我们的中心属性吗?...它应该是这样的: async getLocation() { try { this.loading = true; const response = await axios.get(

    71810

    Flink1.8.0发布!新功能抢先看

    5万人关注的大数据成神之路,不来了解一下吗? 5万人关注的大数据成神之路,真的不来了解一下吗? 5万人关注的大数据成神之路,确定真的不来了解一下吗?...如果部署依赖于flink-shaded-hadoop2包含 flink-dist,则必须从下载页面的可选组件部分手动下载并打包Hadoop jar并将其复制到/lib目录中。...你现在应该使用 Batch/StreamTableEnvironment.create()。...2、FlinkKafkaConsumer现在将根据主题规范过滤恢复的分区(FLINK-10342) 从Flink 1.8.0开始,现在FlinkKafkaConsumer总是过滤掉已恢复的分区,这些分区不再与要在还原的执行中订阅的指定主题相关联...现在CompositeTypeSerializerSnapshot,你应该使用复合序列化程序的快照,该序列化程序将序列化委派给多个嵌套的序列化程序。

    1.4K20

    独家 | 手把手教你用Python进行Web抓取(附代码)

    如果您想练习抓取网站,这是一个很好的例子,也是一个好的开始,但请记住,它并不总是那么简单! 所有100个结果都包含在 元素的行中,并且这些在一页上都可见。...结果包含在表格中的行中: 重复的行 将通过在Python中使用循环来查找数据并写入文件来保持我们的代码最小化!...可以使用urllib.error模块在此时实现错误处理。 搜索html元素 由于所有结果都包含在表中,我们可以使用find 方法搜索表的soup对象。...然后我们可以使用find_all 方法查找表中的每一行。 如果我们打印行数,我们应该得到101的结果,100行加上标题。...,因此我们可以使用try except条件,以防万一找不到网址。

    4.8K20

    腾讯TMQ在线沙龙|Android应用Dex分包之旅

    至于你提到的异常,应该不是分包造成的,可能是将已经混淆过的jar包再次混淆造成的,建议参考一下Proguard相关的文档来解决。...2、提问:如果不使用dex分包,是否有其它的方法优化我们apk,比如给jar包进行瘦身 答:正如在分享中提到的那样,不使用dex分包,也是可以用缩减代码和方法数来优化dex的(给jar包瘦身也包含在内,...因为第三方jar包最终也会被打包在dex文件中)。...3、提问:使用dex分包需要考虑哪些可能会出现的问题 答:dex分包过程中可能出现的问题主要有NoClassDefFoundError、crash、启动耗时过长等。...具体说明可以参考分享PPT的内容。 4、提问:您提到在低版本构建工具上实现了分包,请问构建方案是Ant吗,能稍微介绍一下吗。

    1.1K90

    【C语言必学知识点七】你知道在动态内存管理中存在的内存泄露问题吗?遇到内存泄露时应该如何处理?今天跟你好好介绍一下如何正确使用calloc与realloc!!!

    他们又应该如何使用呢?在今天的内容中,我们将会对这些问题进行一一的探讨,下面我们就一起进入今天的内容吧!!!...因此calloc函数的返回值情况应该是与malloc函数的返回值情况一致: 申请成功时,函数返回指向空间的指针 申请失败时,函数返回空指针 接下来我们就来看一下该函数应该如何使用; 1.2 calloc...,通过calloc函数来申请空间,就能保证在后续对空间的使用中不会出现因为随机值而导致的错误。...现在有朋友可能会奇怪,这个realloc真的这么神吗?...这时有朋友可能就会说,那我们重新创建一个数组,不是一样能够达到同样的效果吗?

    11610

    使用 pod lib create 创建库

    如果您想要一个示例项目pod try MyLib或需要让您的库的测试在应用程序内运行(交互测试,自定义字体等),那么您应该说是。一个好的指标是 这个Pod应该包含截图吗?...,如果是的话,你应该有一个演示。 选择测试框架 你应该测试你的库。测试可确保使用您库的人员的稳定性。在开源库中,这意味着人们可以在知道他们没有打破隐含期望的情况下进行更改。...我们为您的测试框架提供了所有必要的包含和设置,MyLib-Tests.pch以便您不必将它们包含在每个文件中。...和以下文件夹: Pod - 这是您放置库的地方 Example - 这是生成的演示和测试包 将您的库放在一起 CocoaPods将立即打开您的Xcode项目; 从那里你可以编辑CocoaPods生成的所有文件...您应该继续使用trunk指南开始向公众部署。 如果您要部署到私有Specs仓库,则需要添加该仓库。请参阅Private Specs Repos上的指南以进行设置。

    3.8K10

    如何编写可怕的 Java 代码?

    对一切使用异常 2. 不用担心访问修饰符 3. 在 Java 中没有什么是真正的 final 4. 使用 Java 序列化,干就对 5. 将对象用于一切 6. 充分拥抱便捷编程的艺术 7....不要学习任何新知识–你总是最了解 ---- 我决定告诉你如何编写可怕的Java代码。如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读。...如果你正在寻找有关如何编写良好代码的建议,请查看其它文章! 1. 对一切使用异常 你知道循环对吗?...充分拥抱便捷编程的艺术 你知道比尔·盖茨更喜欢懒惰的开发人员吗?...你永远都不应学习任何新知识,因为你已经是最好的了。 你有能力去做这件事,并不代表你应该做 ---- ---- 生活很美好,明天见(。・ω・。)ノ♡

    92620
    领券