请问怎么写MIPS汇编语言入门

&>&&>&&>&&>&oc代码直接转swift代码
oc代码直接转swift代码
上传大小:43KB
oc代码直接转swift代码,非常好用,绝对福利~更多精彩
嵌到我的页面
<input type="text" value="">
综合评分:4(35位用户评分)
所需积分:0
下载次数:690
审核通过送C币
创建者:nigelyq
创建者:liuyujie0514
课程推荐相关知识库
上传者其他资源上传者专辑
移动开发热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
oc代码直接转swift代码
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:  大多数情况下,人的记忆总是那么不靠谱。  项目中,时常修改了一处测试代码,结果版本发布后才发现那段该死的代码没有替换掉。比如测试支付时,越过中间若干判定价格逻辑,最后在发起支付处直接将价格写死为0.01¥方便测试,如下图
一句测试代码
  今天基于已有工程框架,开发新的app。有一些工程配置和目录结构可以复用,且像app初始化要做的事、检查更新、数据持久化模块大部分流程都是一样的,命名也大体相同。问题在于,此类代码有关联以前工程的业务层,部分业务类的定义在工程早期搭建阶段无法确定,而之后再加这类已经写好并测试无问题的组件初始化代码又容易遗漏,那么这时候最方便的莫过于注释+编译警告了。  所以问题来了,从上个项目起,代码全部使用Swift编写。以前Objective-C代码里使用#warning可以生成编译警告,但Swift里没有这种功能。Google了下,找到了一个编译时。最后经过简单修改,添加脚本如下:
TAGS=&#TODO:|#FIXME:|#WARNING:&
ERRORTAG=&#ERROR:&
find &${SRCROOT}& \( -name &*.h& -or -name &*.m& -or -name &*.swift& \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching &($TAGS).*\$|($ERRORTAG).*\$& | perl -p -e &s/($TAGS)/ warning: \$1/& | perl -p -e &s/($ERRORTAG)/ error: \$1/&
  其原理就是检查&.h&、&.m&、&.swift&后缀的文件中,每一行代码是否包含给定特征字符串。匹配两种字符串,一种是以TAGS中定义过的值开头,中间包含任意数量的字符,直到行尾,匹配到即报黄色警告;另一种是以ERRORTAG中定义过的值开头,中间包含任意数量的字符,直到行尾,匹配到即报红色错误警告。  需要说明的是,第二种虽然报编译错误,但并不影响编译生成二进制文件,调试很方便。效果如下图:
编译警告列表
代码中的警告
  起初本来不打算在定义标签前增加#符号,但发现编译过程中和正在使用的代码产生了命名冲突。如下图:
百度地图定义的错误类型被匹配到了
百度地图定义的错误类型被匹配到了
  鉴于此,虽然麻烦一些,但是符合Swift的编码规范,在警告标签前加#。(Objective-C的定义规范是前缀@)Swift开发的调试与OC类似,但也有很多不同之处,充分掌握一门语言的调试技巧对快速开发有很大帮助,使我们在开发过程中更加游刃有余,本文只讲Swift调试和OC的差异,并不是LLDB调试基础篇,还不了解的可以先看这里
可爱的class去哪了?
以前总喜欢po a.class 或 po a.superclass来查看类结构,但是在对swift代码做如下操作时····
var a:String?
(lldb) po a.class
error: :1:3: error: expected member name following '.'
:2:1: error: expected identifier in class declaration
困惑时先来看下String的定义:
public struct String {
/// An empty `String`.
public init()
在Swift中String是个结构体,并没有像OC里的String那样是个类并继承于NSObject(class方法属于NSObject类)。并且String中自己也并没有实现class方法,所以Swift中自然就不能这么玩了~正确的姿势是:
(lldb) po a.dynamicType
Swift.Optional&Swift.String&
什么鬼,第一眼根本看不懂····不过总比报错好了,仔细看下,a类型为Swift的Optional,里面装Swift的String
nil带来的困惑
(lldb) po a
OC 时代,po输出这样的结果很常见,但是到了swift时代,这就有点烧脑,为什么这么说呢?因为Swift 中无论变量或是常量,都不能被赋予 nil ,所以,此货并非 nil
(lldb) po a.dynamicType
Swift.Optional
(lldb) e a="hello"
(lldb) po a
? Optional("hello")
- Some : "hello"
那么当 a 赋值 nil 后,po a 是不是要打印 Optional(nil) 比较好理解一点?
p命令的改动
以前要获取一个对象self的内存地址,往往是用p self即可,如今改成了直接打印类结构了,充当了以前p *self的效果
(Demo.AppDelegate) $R0 = 0x00007f9feca2ab90 {
UIKit.UIResponder = {
NSObject = {
isa = Demo.AppDelegate
_hasAlternateNextResponder = false
_hasInputAssistantItem = false
取代原来的方案是unsafeAddressOf:
(lldb) po unsafeAddressOf(self)
? 0x00007f9feca2ab90
- pointerValue : 344
或者用NSLog
(lldb) po NSLog("%p",a)
但是!等等,这个对字符串变量并不适用,原因很简单,结构体传入方法时是传值,所以内存地址自然就是不对的。所以对于字符串,正确的内存地址获取方式是
(lldb) po str._core._baseAddress
感觉麻烦了不少啊啊啊啊啊啊啊啊····
打印类结构失效?
OC环境下打印对象类结构时可用p *a
到了Swift下··报错~
(lldb) p *self
error: &EXPR&:1:1: error: '*' is not a prefix unary operator
相应的转变是改为直接p就好了
(lldb) p self
(Demo.AppDelegate) $R87 = 0x0fba0 {
UIKit.UIResponder = {
NSObject = {
isa = Demo.AppDelegate
_hasAlternateNextResponder = false
_hasInputAssistantItem = false
打印时带Optional很烦人?
Swift打印Optional变量时会带上Optional("xxx"),除非是nil
var a :String? = "hello"
(lldb) po a
? Optional("hello")
- Some : "hello"
这时候如果想去除Optional的干扰,可以强制解包即可
var a :String? = "hello"
(lldb) po a!
fatal error: unexpectedly found nil while unwrapping an Optional value
var a :String?
(lldb) po a!
fatal error: unexpectedly found nil while unwrapping an Optional value
error: Execution was interrupted, reason: EXCBADINSTRUCTION (code=EXCI386INVOP, subcode=0x0).
The process has been returned to the state before expression evaluation.
此错误为解包时遇到nil造成,所以代码了胡乱加上!解包其实有风险的,一定要想清楚是否会出现nil的情况
如何通过地址打印对象?
OC中很简单,直接po 0xdb11b80 即可,但这招在swift里不好使了·······
也不知道是不是bug···
不过还是可以通过间接点的手段完成
(lldb) po self
(lldb) e -l objc++ -O -- 0x7ffbb841bfe0
(lldb) e -l objc++ -O -- [0x7fa668f10b10 window]
; layer = &
对,你没看错,就是通过指定OC来调用···说句实话,变麻烦了,也不知道后是不是Xcode暂时的缺陷··
直接po地址无效的前提是当前调用栈在swift领域,并且我测试的版本是7.01,如果你有兴趣,可以尝试等程序跑去了后去暂停程序再po 地址,发现是好使的~什么?你想说这功能没用?NO!NO!NO!NO!很有用,后面会专门写一篇文章介绍这些技巧在生产中的用法
let/var导致类型难以判断?
swift的类型推断让语法在很多地方能省去了声明类型,这对开发者来说是好事,比较重复劳动就应该又机器来做。但是很多人开始抱怨说let/var定义让常量/变量不明确,有时候自己都的反应一会才能搞清楚他是个什么类型。举个例子:
let v = myMethod([1,2])
此段代码,如果不看myMethod的定义,你能知道v是什么类型么?并不能~这时候有个简单的办法可以查看 Option + Click 即可
expression中定义变量的变化
(lldb) e NSString *$a = @"c"
(lldb) po $a
Swift中变为
(lldb) e let $a = "a"
(lldb) po $a
Swift的符号断点
OC中的符号断点为-/+[ClassName methodName],到了Swift环境里,坑爹的提示一没变··
感觉有点误导人,其实Swift里的符号表断点应该这么玩
此方法同样适用于swift里的结构体方法,函数,类方法等,不过比较有意思的是,类方法和实例方法的符号断点竟然完全一样,那如果只想给示例方法打断点该咋办?加条件?一这点和OC截然不同,OC里可以通过+/-号区分。
很遗憾,异常断点还没加入对swift的支持,手动抛的异常并不能被断点捕获
断点行为 (Action)
Swift的行为断点已经支持直接写swift代码,可以通过条件决定是否要断下来
被忽略的REPL
Xcode 6.1 后REPL被集成进了xcode debuger中并能和调试环境互动了,由于篇幅问题,这里先不展开说,后面会专门写一篇介绍
尽管类似得调试命令,不过通过对比还是不难看出有很多地方不同并且有很多不完善的地方,调试过程中也经常伴随crash,不顾毕竟OC改了那么多年得bug才走到今天,Swift有这个成绩已经不错了,再给些时日相信Swift会慢慢走向成熟稳定~
目前我能想到的不同点就这些,欢迎大家补充~
本帖已被设为精华帖!
本帖已被设为社区 Wiki!
附加内容, 使用此功能的话, 会给所有参加过讨论的人发送提醒.
周董,nb,受教了!!
写得好赞,最近正好遇到不懂的···
请注意单词拼写,以及中英文排版,
支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里
支持表情,见
@name 会链接到用户页面,并会通知他
上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
Ctrl+Enter
加载耗时的资源可以考虑用lazy字段修饰
主题数: 111
评论数: 516

我要回帖

更多关于 x86汇编语言 的文章

 

随机推荐