Tag: 目标C

Swift中的按位移位和运算符

一点是最小的信息,可以是1或0(开/关)。 八位加在一起称为一个字节。 Swift中的UInt8由8位表示。 此无符号整数与有符号整数Int8在于Int8使用1位表示该整数是正数还是负数。 用八位表示一个数字意味着我们可以用UInt8表示2 = 256个不同的数字。 0 = 00000000 2 = 00000010 4 = 00000100 8 = 00001000 1 = 00000001 3 = 00000011 5 = 00000101 9 = 00001001 6 = 00000110 10 = 00001010 7 = 00000111 11 = 00001011 12 = 00001100 13 = 00001101 14 = 00001110 15 = 00001111 […]

我们如何为iOS动态更改布局

什么是动态更改的布局? 由于设备尺寸的不同,此布局也有所不同。 我上一个项目时遇到了此类问题。 主要思想是缩放屏幕上我们拥有的所有内容。 因为更大的屏幕需要更多的调整。 如何解决? 您可能会得到的第一个想法是“尺寸等级”。 实际上,我们最初也使用了此方法,但这还不够。 当项目增长时,控制器也将增长。 这导致对每个尺寸类别使用更多不同的约束。 当您尝试更改任何内容时,这会使您的生活如地狱般艰难。 这些并不是我们使用此想法遇到的所有问题。 有些控制器的UI非常复杂,几乎与任何设备都不一样,因此我们被迫使用几乎所有可能的尺寸等级。 想象一下,当您需要为iPad进行某些更改时,可能会浪费大量时间来寻找iPad的位置。 当我们不想更改约束常数,而是更改其乘数或优先级时,就会出现一个更大的问题。 在size类中实际上是不可能的。 相反,您需要为每个尺寸类别创建不同的约束,并在其中包含所需的值,否则,将对该约束的其他尺寸类别禁用该约束。 我们到底会得到什么? 最终,这种方法真的很难支持,它不灵活,情节提要变得非常复杂,我们有很多难以处理的约束。 最后,无法区分4s,5、6等设备(将来列表可能会更大)。 新分辨率的设备呢? 我们需要为这些创建新的UI。 这意味着我们可能需要在新设备发布时更新代码并将新版本上传到Appstore。 这可能不是项目的最佳解决方案,因为此更新可能由不熟悉先前项目体系结构的其他开发人员执行。 我可以发现的唯一好处是,所有UI工作人员均在UI文件中执行,并且未与代码连接。 这使我们的代码更加清晰。 即使有很多弊端,我们也可以接受这种方法,因为当我们打开它时,它有可能缩放所有设备的UI,这在Size Classs中是不可能的。 我们可以得出的结论是忽略尺寸等级。 下一步是什么? 我们要做的下一步是从代码更改约束值。 由于设备的差异,我们使用不同的值。 这种方法有多好? 实际上,这可能很奇怪,但是绝对比Size类好。 我们可以轻松地将此代码与其余所有代码分开。 是的,这不是明确的分离,并且代码量大量增加。 最后,代码量急剧增加。 添加新视图或更改现有视图需要花费大量时间。 但是,对于开发人员来说,情况变得更加清晰,并且情节提要文件的权重降低了。 这种方法使我们能够覆盖所有设备。 未来设备的问题仍然存在,没有人愿意回到他们以前的项目并为所有视图添加新值。 对于开发人员来说,这将是一个地狱,特别是如果该项目很大。 我想强调的是,以上所有内容都可以应用于字体以及约束。 接下来的两个解决方案可能是最好的,各有其优缺点。 最后,您只需要决定哪个更适合您即可。 先前方法的主要问题是什么? 我们需要将大量代码添加到新视图中。 这会花费很多时间,并且代码变得非常复杂和丑陋。 问题是在哪里删除此代码,或者对我们来说如何简化呢? 在IBInspectable属性中找到了该解决方案。 我们为每个更改约束常量的设备添加了约束属性。 这是一个代码示例,该代码是如何实现的。 @interface NSLayoutConstraint(BBBDevices) @属性(非原子,分配)IBInspectable […]

深入研究Swift和Objective-C之间的互操作性

当您开始一个新的iOS项目时,毫无疑问,您应该完全使用Swift编写它。 Swift已经接管了Objective-C多年了。 https://www.tiobe.com/tiobe-index/使用Swift强大的编译器,我们可以更安全,更快速地构建软件。 但是在现实世界中,我们可能会在Objective-C中面临许多过时的代码。 由于Swift / Objective-C具有出色的互操作性,因此我们可以维护包含它们的项目。 有关如何设置它们的信息,请查看https://medium.com/ios-os-x-development/swift-and-objective-c-interoperability-2add8e6d6887。 处理旧的ObjC的最常见策略是在Swift中编写任何新功能,并修改Objective-C文件以使用它们。 空性抬头 Swift是一种全新的语言,尽管它与Objective-C兼容。 Swift为我们介绍了一些基本类型,例如Date , Data , String。 并且它们可以自动桥接到Objective-C中的对象,即NSDate,NSData,NSString。 但是,由于Swift引入了optional / non-optional ,当Swift代码转换为Objective-C时,事情会有些棘手。 这是一个例子。 我们定义一些Swift函数,并通过添加关键字@objc使它们在Objective-C中可用 @objc func testString(_ string:String){print(string)} @objc func testData(_ data:Data){print(data)} @ objc func testDate(_ date:Date){print(date)} 在Objective-C中,我们会得到。 -(void)testString:(NSString * _Nonnull)string;-(void)testData:(NSData * _Nonnull)data;-(void)testDate:(NSDate * _Nonnull)date; 因为在Objective-C中没有可选/非可选 ,所以我们有_Nonnull。 有关Objective-C中的可空性的更多信息,请参阅 Apple的博客 )。 如果我们使用nil调用此函数,则只会收到警告。 如果我们不将nil显式地传递给这些函数(例如下面的代码),我们可能也不会意识到那些警告。 这些函数中传递的对象不能为nil,因为在Swift中将这些函数的参数定义为非可选的,因此Swift运行时将尝试从nil创建对象。 这是非常危险的,结果也令人惊讶。 [self testString:nil]; […]

变量,数据类型,常量和预处理器

在本文中,您将学习Objective-C的基本构建模块。 如果您是编程的初学者并且是Objective-c的新手,那么此课程适合您。 我们使用任何语言为世界上的物体或地点命名。 这些名称代表我们的信息。 这就是我们记住事情的方式。 我们人类对人,地方,情感等所有事物都有自己的名字。 我们能想到的就是命名。 同样,在编程语言中,我们将信息存储在变量,常量,对象,属性,枚举,结构等中。 每个人都有独特的目的,让我们一一看待它们。 变数 顾名思义,变量是可以存储可以更改的信息的数据块。 例如,如果“名称”是变量, NSString * name = @“苹果”; //要么 NSString * name = @“ google”; 两者均有效,因为name是变量。 这意味着名称可以存储任何类型的信息,只要它是文本即可。 NSString表示变量的文本类型。 这些类型也称为数据类型。 对于不同类型的数据,可以使用不同的数据类型。 Objective-c是C的超集,因此它具有C的所有数据类型,并且很少添加自己的数据类型。 有整数,浮点数,双精度数,NSString,NSDate,NSArray,NSMutableArray,NSDictionary。 多数民众赞成在看起来很多,但不要打扰,如果您按照我们的教程进行学习,将会发现它简单而有趣。 现在,仅需了解变量可以存储可以更改的数据,只要它是任何特定的数据类型即可。 数据类型:- 我们每天都使用不同类型的数据来表示信息。 数字包含数字,单词包含字母。 类似地,在编程语言中,有不同的数据类型,例如整数,浮点数,字符串等,它们都有各自的特征,例如浮点数可以表示十进制数字,字符串包含可以更改和连接的一系列字符。 让我们看一下Apple为iOS和Mac-OS提供的数据类型。 数据类型是预定义的一组特性,适用于属于该类型的数据。 从C继承的数据类型 预处理宏 :- 我们了解了变量。 变量使我们能够存储和处理信息。 但是,如果我们想保持价值不变怎么办。 在每种编程语言中都有一个数据类型,它称为constant 。 在objective-c中,我们可以用两种方法定义一个常数: 使用预处理微型定义值 定义一个常数 预处理宏 预处理微定义为: #define my_money 1000000000 […]

UITableView iOS中的自定义单元格

自定义UITableViewCell可以允许使用功能强大,动态且响应迅速的界面。 通过广泛的自定义并结合其他技术,您可以执行以下操作:更改特定的属性或界面元素,以便在单元中进行更改或设置动画或绘制图素;在用户滚动浏览时有效地加载视频,甚至从用户下载时显示图片网络。 这里的可能性几乎是无限的。 以下是自定义单元格的简单示例: 在包含tableView的UIViewController中,注册新的自定义单元格的类(请参见下文)。 请注意,仅当您未在表视图的界面中设计带有情节提要的单元格时,才有必要。 迅速 覆盖func viewDidLoad(){ super.viewDidLoad() //注册单元格类 tableView.register(CustomTableViewCell.self,forCellReuseIdentifier: CustomTableViewCell.identifier) } 如果您选择使用XIB文件,请改为registerNib //注册笔尖 tableView.register(UINib(nibName:CustomTableViewCell.identifier,bundle:nil), forCellReuseIdentifier:CustomTableViewCell.identifier) 现在您的tableView知道了您的自定义单元,您可以在cellForRowAtIndexPath中将其出队: 迅速 func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath)-> UITableViewCell { //加载CustomTableViewCell。 确保此处提供的标识符与您的单元格中的标识符匹配 让单元格:CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier(CustomTableViewCell.identifier)为! CustomTableViewCell //这就是神奇的地方-在自己的单元格上设置自定义属性 cell.customLabel.text =“我的自定义单元” 返回单元 }

快速稳定的离线转换

我们为需要最佳结果的公司提供了一个离线转换器。 通过允许用户离线转换其代码,我们为他们提供了速度,稳定性和安全性。 在使用大型源文件(带有100,000行代码的2.6MB .m文件!)运行测试时,我们注意到转换器的改进空间。 无论您的项目大小如何,我们都必须努力提供速度和稳定性。 大文件转换期间需要改进的一件事是性能。 我们很高兴地报告大型文件的性能提高了40倍 。 看一下转换少数ViewControllers的速度: 我们对2.6MB源文件的初步测试导致转换失败。 我们已经修复了错误,现在可以成功进行转换。 与离线转换器的改进无关,我们还添加了对NS_TYPED_ENUM和NS_TYPED_EXTENSIBLE_ENUM支持。 NS_TYPED_ENUM用于表示一组固定的可能值: //将三个交通灯颜色选项存储为0、1和2。 typedef long TrafficLightColor NS_TYPED_ENUM; TrafficLightColor const TrafficLightColorRed; TrafficLightColor const TrafficLightColorYellow; TrafficLightColor const TrafficLightColorGreen; 而NS_TYPED_EXTENSIBLE_ENUM可用于创建一组可能的值。 typedef TrafficLightColor TrafficLightCombo [3] NS_TYPED_EXTENSIBLE_ENUM; TrafficLightCombo const TrafficLightComboJustRed; TrafficLightCombo const TrafficLightComboJustYellow; TrafficLightCombo const TrafficLightComboJustGreen; TrafficLightCombo const TrafficLightComboRedYellow; 现在这两个都可以转换为它们预期的Swifty等效项:代表常量的Swift结构! 在这里尝试进行转换:http://swiftify.me/3y0lv4 如果您想尝试一下并听到更多关于我们必须提供的信息,我们邀请您安排演示。 我们很乐意讨论将项目移至Swift的各种可能性。 我们希望您喜欢我们添加的改进。 如果您有任何反馈意见,请留在下面的评论中!

持续学习曲线(2018年6月)

6月7日,星期四 在生产中使用服务器端Swift的经验教训 完善 完美记录 Kitura 汽 泽沃 让我们加密 数字海洋部署 风暴 Web套接字 完美的TensorFlow 技术交流 熟练技工 斯威夫特ORM 完美HTTP服务器 然后 迅捷时刻 MySQL文档 状态码定义 SoundCloud的工程水平 iOS因素 iOS因素— Git 质地 为什么我使用Texture构建我的应用程序 类套件 OneSignal 核心数据编辑器 6月8日星期五 VueFlux QuickTableViewController WWDC 2018平台国情咨文回顾 升级:为什么开发人员需要能够持久识别技术(以及如何实现) 微软为何收购GitHub 让我们为Xcode开发人员优化与终端的合作 如何在新职业中或在职业生涯中的任何时候逃脱炼狱的教程 Swift 4.2的新功能 什么是新的 WWDC 2018链接 MySQL 5.7参考手册 为什么高级开发人员会编写哑巴代码,以及如何在千里之外找到少年 6月11日星期一 Apple开发人员文档 证书固定 无所作为的力量 迅捷 WWDC 2018 6月13日,星期三 在Swift中分享激情 […]

Swift与Objective-C。 选择哪种iOS语言

Objective-C和Swift是用于在macOS,iOS,tvOS,watchOS,CarPlay和Linux(仅适用于Swift)操作系统下对Apple软件产品进行编码的编程语言。 这些语言具有相应的应用程序编程接口(API)和框架(Cocoa,Cocoa Touch)。 Objective-C创建于80年代后期,并影响了Smalltalk(面向对象语法)和C(面向非对象)编程语言。 较新的语言Swift不基于C语言。 相反,它不再具有任何继承,只能与C库和框架一起编译。 Swift提供了更强大的工具和现代化的编码解决方案,以实现更简单但更具表现力的编码,应用安全性和性能。 同样,该语言是直观的,因此对于新程序员来说更容易学习。 下表列出了Swift与Objective-C的一般技术特性。 1. Objective-C是一种经过认可且经过充分测试的语言 2. Objective-C更稳定 3.更轻松地使用私有API 4. Objective-C易于与C ++兼容 1.难以学习 2.合格的Objective-C开发人员 1.如果一个应用程序已经用Objective-C编写并且具有庞大的代码库(超过100,000个代码行) 2.如果您正在开发框架,请使用Objective-C 3.如果广泛使用C或C ++第三方框架 雨燕更快 2. Swift更安全 3. Swift更易读 4. Swift的代码更少 5. Swift不太容易出错 6. Swift与内存管理集成 7. Swift是一种开源语言 8. Swift具有交互式编码 9. Swift更接近其他平台 10. Swift是苹果一直关注的焦点 1.较慢的编译速度 2.没有ABI稳定性 3.缺少C ++导入 综上所述,与Swift相比,Objective-C是一种过时的语言,缺少现代的工具和属性。 Swift具有许多更新和持续的发展计划,该语言得到了Apple的大力支持。 它是一种易于学习,安全,现代且交互式的编程语言。 Swift具有简化的编码模式以及与Objective-C的编码接口。 迅速编写代码,迅速执行! 强烈建议您为下一个启动项目选择Swift。 请在此处给我们留言,以便我们为您提供有关您的开发方法的建议或帮助您在iOS上构建下一个出色的产品。 这是在MLSDev博客上发布的文章的简短摘要。 如果您想获得有关这两种编程语言的更多详细信息,请 […]

持续学习曲线(2018年7月)

7月3日,星期二 WrapBootstrap 7月4日,星期三 Swift Package Manager基础 完美的例子 将您的项目分成多个目标 7月5日,星期四 Server Side Swift入门:1.0 完美入门-完美模板 URL路由 完美的JSON API示例 处理JSON API中的传入数据 完善的JSON API POST示例 邮差 使用Postman进行API端点测试 API测试目标 SQL教程 7月9日星期一 使用Xcode 9进行重构 SwiftLint 迅捷格式 迅捷 资料来源 更好的iOS项目:如何使用Mint管理工具 使用Fluid将任何网站变成真正的Mac应用 UserDefaultsStore Swift中的自定义容器视图控制器 在GitHub上备份和同步邮递员收藏 Xcode 9生产力提示 星期二七月10 使用Swift为Apple平台构建本机应用的新方法 使用统一日志记录系统在iOS上进行调试 Swift中无子类的视图控制器 扩大您的数据人员。 统一你的公司 改变您对数据的看法 星期四七月12 作法:在Swift中使用JSON和可编码 带有匹配项的简单代码签名 先进的iOS体系结构:解决MVC,MVVM和VIPER模式的5个问题 迈布里奇 使神经网络再次变得不酷 iOS开发目录是涵盖iOS开发的博客和网站的完整列表 优化Swift的构建时间 objc […]

iOS App安全性-5

稍后我们将看到如何使用这些信息。 但是由于在本文中,我进入了工具,让我们来看看class_dump。 class_dump的作用:它为类,类别和协议生成声明。 在其开发时,它仅用于Objective-C运行时信息。 http://stevenygard.com/projects/class-dump/ 但是有一个支持迅速的回购叉,这很有趣 0xced / class-dump 这是一个命令行实用程序,用于检查存储在Mach-O文件中的Objective-C运行时信息。 它产生… github.com 作为示例应用程序,我使用了YahooWeather,我认为它是最漂亮的应用程序之一。 如您所见,它基于obj-c,并且您看到所有标头。 这足以操纵一个App。 我们将使用这些工具继续进行逆向工程。