GVKun编程网logo

我应该直接学 Swift,还是 Objective-C?(学swift有用吗)

2

在这里,我们将给大家分享关于我应该直接学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、iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]、objective-c – iPhone SDK Objective C是否支持函数内部的函数?的内容。

本文目录一览:

我应该直接学 Swift,还是 Objective-C?(学swift有用吗)

我应该直接学 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 (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.iostd.complex
  • clang 模块公开模块映射中指定的头文件。私人详细信息(在 .m 中)根本不会公开。
  • 是对原始 #include#import 样式导入的改进,以改进构建过程(这是一个很大的主题,请阅读 Clang module docs)。

iOS Swift 应用程序随机 EXC_BAD_ACCESS 崩溃:swift_bridgeObjectRetain swift_retain swift::RefCounts<swift::RefCountBitsT<(swift::RefCountInlinedness)1>

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]

iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]

问题:

Closed. 关闭。 This question does not meet Stack Overflow guidelines . 此问题不符合Stack Overflow 准则。 It is not currently accepting answers. 它目前不接受答案。

Want to improve this question?想改善这个问题吗? Update the question so it''s on-topic for Stack Overflow.更新问题,使其成为 Stack Overflow的主题。

Closed 6 years ago . 6年前关闭。

Improve this question 改进这个问题

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/6GPS

objective-c – iPhone SDK Objective C是否支持函数内部的函数?

objective-c – iPhone SDK Objective C是否支持函数内部的函数?

我知道 javascript,例如支持函数内部的函数,如下所示:
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支持嵌套函数作为C的扩展(默认情况下禁用).我认为这个选项不适用于带有gcc的Objective-C(或C),即使它是使用它可能不是一个好主意(可移植性等).

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、iOS:开源 VoIP/SIP Objective-C 代码 [关闭] - iOS: Open Source VoIP/SIP Objective-C Code [closed]、objective-c – iPhone SDK Objective C是否支持函数内部的函数?的相关知识,请在本站搜索。

本文标签: