在这里,我们将给大家分享关于我应该直接学Swift,还是Objective-C?的知识,让您更了解学swift有用吗的本质,同时也会涉及到如何更有效地clang(objective-C)模块和Swif
在这里,我们将给大家分享关于我应该直接学 Swift,还是 Objective-C?的知识,让您更了解学swift有用吗的本质,同时也会涉及到如何更有效地clang (objective-C) 模块和 Swift 模块有什么区别? Swift 模块、iOS Swift 应用程序随机 EXC_BAD_ACCESS 崩溃:swift_bridgeObjectRetain swift_retain swift::RefCounts
- 我应该直接学 Swift,还是 Objective-C?(学swift有用吗)
- clang (objective-C) 模块和 Swift 模块有什么区别? Swift 模块
- iOS Swift 应用程序随机 EXC_BAD_ACCESS 崩溃:swift_bridgeObjectRetain swift_retain swift::RefCounts
- iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]
- objective-c – iPhone SDK Objective C是否支持函数内部的函数?
我应该直接学 Swift,还是 Objective-C?(学swift有用吗)
我应该先学C/Objective-C还是直接学Swift?
Swift是一个全新的语言,与Objective-C或C都没有任何关系。我的意思是它们都是编程语言并且遵守一些基础概念和范例,但是你并不需 要在学习其中一个之前先学另一个。即使你是编程新手,你也可以学习苹果发布的官方的Swift文档而无需先学Objective-C。
我正在学习Objective-C,我应该转为学Swift吗?
这要试情况而定。如果你把学习iOS当做一个爱好或者出于好奇心才学,那么转到Swift学习上吧。如果你将从事iOS开发视为职业,那么你要知道 外面至少有100万个应用都是用Objective-C编写的,Swift于2014年才刚刚发布,所以你将来的职业的app开发仍然很有可能使用 Objective-C。所以你需要学习Objective-C来获得一个工作,直到Swift成为标准,这大概将花费数年时间。同时学习两门语言也将对 你有好处。你未来的上司甚至可能会让你来将现存的Objective-C app切换到Swift上。不过我对这个观点有所保留,因为一个应用最重要的部分是它的功能而非它使用的语言,因此重写现有app的做法可能不会流行。
我建议初学者选择Swift是因为它是一种友好的语言,并且感谢playground让它变得容易学会。一旦你学过了Swift,如果将iOS开发视为职业的话,对于学习Objective-C也将更容易理解。
最后,Swift是一种现代语言,如果你学习Swift,意味着也同时做好了面向未来的准备,因为Swift将是新一代的应用所用的语言(包括 Apple Watch上的应用)。Swift语言是苹果送给每个人的礼物。世界上还没有5年经验的Swift开发者,但如果你现在开始学习Swift,那么过了5年 你就将成为其中一位了。
我最后的建议是,不管你选择哪一门语言,学习它并且精通它。最后你将发现,只要你学会iOS SDK,使用哪种语言并不是最重要的。并且学了一种语言之后可以很容易的开始学习另一门,最紧要的是,从现在就开始学习。
原文出处:teamtreehouse译文出处:cocoachina
clang (objective-C) 模块和 Swift 模块有什么区别? Swift 模块
如何解决clang (objective-C) 模块和 Swift 模块有什么区别? Swift 模块
Clang 模块记录在 here 中,Swift 模块记录在 here 中,没有详细说明。
既然 clang 是 Swift 内部也使用的 LLVM 前端编译器,那么 Swift 模块总是一个 Clang 模块吗?它们完全一样吗?
解决方法
它们是不同的。 不过在构建过程结束时,它们都需要链接到您的应用程序/库的其他 .o
和 .dylib
文件,以便运行。
Swift 模块
From Swift Serialization.md docs:
Swift 代码的基本分布单位是模块。模块包含声明,作为客户端编写代码的接口。
Swift acccess control docs:
模块是代码分发的单个单元:作为单个单元构建和交付的框架或应用程序,可以由另一个模块使用 Swift 的 import 关键字导入。
由
.target()
中的Package.swift
配置不能有子模块,所以用户不能在 Swift 中
import Module.Submodule
。用户仍然可以导入特定实体import struct PackageModel.Manifest
,但这比导入子模块要冗长得多。它的接口以
.swiftmodule
的形式存在。 What is a .swiftmodule
?。 documentation 说:从概念上讲,包含模块接口的文件与特定库的 C 头文件集合的用途大致相同。
编译器经常生成这个
.swiftmodule
文件,就像生成的 Objective-C 头文件一样,但它不是文本,而是二进制表示。它包括可内联函数的主体,很像 Objective-C 中的静态内联函数或 C++ 中的头文件实现。但是,Swift 模块确实包含私有声明的名称和类型。这允许您在调试器中引用它们,但这确实意味着您不应该在最深的秘密之后命名私有变量。 from WWDC 2018: Behind the Scenes of the Xcode Build Process- 因此,您的
.swiftmodule
(Swift 模块接口)中公开了私有声明。
- 因此,您的
在将纯 Objective-C 框架导入 Swift 时,Swift 编译器使用其内置的 clang 编译器来导入 Objective-C 头文件。
导入程序会在 Clangs .modulemap
中公开的头文件中找到该框架的声明。 (同样来自 WWDC2018)
- 将 Objective-C + Swift 框架导入 Swift 时,Swift 编译器使用 Umbrella 标头。
Clang 模块
- 由
YourModuleName.modulemap
文件配置(以前为module.map
,但已弃用),格式为 this - 可以有子模块,例如
std
模块有std.io
和std.complex
。 - clang 模块公开模块映射中指定的头文件。私人详细信息(在
.m
中)根本不会公开。 - 是对原始
#include
或#import
样式导入的改进,以改进构建过程(这是一个很大的主题,请阅读 Clang module docs)。
iOS Swift 应用程序随机 EXC_BAD_ACCESS 崩溃:swift_bridgeObjectRetain swift_retain swift::RefCounts
如何解决iOS Swift 应用程序随机 EXC_BAD_ACCESS 崩溃:swift_bridgeObjectRetain swift_retain swift::RefCounts<swift::RefCountBitsT<(swift::RefCountInlinedness)1>
我不断收到来自随机用户的随机崩溃报告。不幸的是,我无法定期重现这一点。用户说崩溃是在 discussionViewController
中随机发生的。所有崩溃报告都有类似的内容:
0 libswiftCore.dylib 0x00000001a53face4 swift::RefCounts<swift::RefCountBitsT<(swift::RefCountInlinedness)1> >::incrementSlow(swift::RefCountBitsT<(swift::RefCountInlinedness)1>,unsigned int) + 60 (atomic:1003)
1 libswiftCore.dylib 0x00000001a53c59e0 swift_retain + 124 (RefCount.h:813)
2 libswiftCore.dylib 0x00000001a5401d60 swift_bridgeObjectRetain + 56 (SwiftObject.mm:585)
3 APPNAME 0x0000000102b59734 closure #1 in discussionViewController.fetchPostData() + 7916
这是完整的崩溃日志和崩溃的线程:
Hardware Model: iphone11,6
Process: APPNAME [11770]
Path: /private/var/containers/Bundle/Application/.../APPNAME.app/APPNAME
Identifier: ----
Version: 62 (62)
AppStoretools: 12E262
AppVariant: 1:iphone11,6:13
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: ---- [1824]
Date/Time: 2021-06-17 12:07:01.4346 +1000
Launch Time: 2021-06-17 12:06:56.4993 +1000
OS Version: iPhone OS 14.6 (18F72)
Release Type: User
Baseband Version: 3.04.01
Report Version: 104
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x8000000000000010 -> 0x0000000000000010 (possible pointer authentication failure)
VM Region Info: 0x10 is not in any region. Bytes before following region: 4339515376
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
UNUSED SPACE AT START
--->
__TEXT 102a7c000-102a94000 [ 96K] r-x/r-x SM=COW ...APPNAME.app/APPNAME
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL,Code 0xb
Terminating Process: exc handler [11770]
Triggered by Thread: 3
Thread 3 name:
Thread 3 Crashed:
0 libswiftCore.dylib 0x00000001a53face4 swift::RefCounts<swift::RefCountBitsT<(swift::RefCountInlinedness)1> >::incrementSlow(swift::RefCountBitsT<(swift::RefCountInlinedness)1>,unsigned int) + 60 (atomic:1003)
1 libswiftCore.dylib 0x00000001a53c59e0 swift_retain + 124 (RefCount.h:813)
2 libswiftCore.dylib 0x00000001a5401d60 swift_bridgeObjectRetain + 56 (SwiftObject.mm:585)
3 APPNAME 0x0000000102b59734 closure #1 in discussionViewController.fetchPostData() + 7916
4 APPNAME 0x0000000102ad09d4 thunk for @escaping @callee_guaranteed (@guaranteed Data?,@guaranteed NSURLResponse?,@guaranteed Error?) -> () + 132 (<compiler-generated>:0)
5 CFNetwork 0x00000001a1b0a3dc __40-[__NSURLSessionLocal taskForClassInfo:]_block_invoke + 540 (LocalSession.mm:687)
6 CFNetwork 0x00000001a1b1c768 __49-[__NSCFLocalSessionTask _task_onqueue_didFinish]_block_invoke + 244 (LocalSessionTask.mm:584)
7 libdispatch.dylib 0x00000001a10d1a84 _dispatch_call_block_and_release + 32 (init.c:1466)
8 libdispatch.dylib 0x00000001a10d381c _dispatch_client_callout + 20 (object.m:559)
9 libdispatch.dylib 0x00000001a10db004 _dispatch_lane_serial_drain + 620 (inline_internal.h:2557)
10 libdispatch.dylib 0x00000001a10dbc34 _dispatch_lane_invoke + 456 (queue.c:3862)
11 libdispatch.dylib 0x00000001a10e64bc _dispatch_workloop_worker_thread + 764 (queue.c:6589)
12 libsystem_pthread.dylib 0x00000001ed04a7a4 0x1ed047000 + 14244
13 libsystem_pthread.dylib 0x00000001ed05174c 0x1ed047000 + 42828
我已验证 discussionViewController.fetchPostData()
不会强制解开任何可选选项,没有 try!
并且在任何地方都使用 [weak self]
和 self?
。该函数非常大,所以我很难缩小崩溃发生的范围。
iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]
问题:
Want to improve this question?想改善这个问题吗? Update the question so it''s on-topic for Stack Overflow.更新问题,使其成为 Stack Overflow的主题。
Closed 6 years ago . 6年前关闭。
I have been tasked with investigating the feasibility of writing an iPhone App to access our internal VoIP/SIP systems.我的任务是调查编写 iPhone 应用程序以访问我们内部 VoIP/SIP 系统的可行性。
I''ve never coded anything close to VoIP before.我以前从未编写过任何接近 VoIP 的代码。 Are there any open source VoIP/SIP libraries or examples in C or Objective-C?是否有 C 或 Objective-C 中的任何开源 VoIP/SIP 库或示例?
An iOS App that I can skin and add our required features to (mainly UI related) would be the holy grail here.一个我可以设置皮肤并向其中添加我们所需功能(主要是 UI 相关的)的 iOS 应用程序将是这里的圣杯。
解决方案:
参考: https://stackoom.com/en/question/6GPSobjective-c – iPhone SDK Objective C是否支持函数内部的函数?
function doSomething(){ function doAnothingThing(){ //this function is redefined every time doSomething() is called and only exists inside doSomething() } //you can also stick it inside of conditions if(yes){ function doSomethingElse(){ //this function only exists if yes is true } } }
Objective-c是否支持此功能?理论范例:
-(void) doSomething:(id) sender{ -(void) respondToEvent: (id) sender{ //theoretically? ... please? } }
奖励:“本地”功能的正确用语是什么?
解决方法
gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
今天关于我应该直接学 Swift,还是 Objective-C?和学swift有用吗的讲解已经结束,谢谢您的阅读,如果想了解更多关于clang (objective-C) 模块和 Swift 模块有什么区别? Swift 模块、iOS Swift 应用程序随机 EXC_BAD_ACCESS 崩溃:swift_bridgeObjectRetain swift_retain swift::RefCounts
本文标签: