V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  jox  ›  全部回复第 8 页 / 共 21 页
回复总数  406
1 ... 4  5  6  7  8  9  10  11  12  13 ... 21  
2014-12-04 21:51:21 +08:00
回复了 jox 创建的主题 iDev 哎, auto layout。。。。。
@hrx00747 就只有一个控件的区别,两个prototype cell的话我得把其他的控件都弄成一样的,同样的约束得加两遍,没意思。其实还有两种用法,一种是把auto layout当frame用,加上x,y,width,height约束,然后IBOutlet,然后修改constant,这样就跟原来使用frame一样了,只要一修改某个约束,auto layout就会自动再生成新的frame。还有一种是frame和Auto Layout混着用,手动创建的view是可以配置frame的,在开启Auto Layout的情况下之所以修改frame不好使是因为修改frame之后,Auto Layout在之后的Layout环节会根据约束生成新的frame,导致之前设定的frame被覆盖了。手动创建的view如果不加任何约束的话,translatesAutoresizingMaskIntoConstraints默认是开启的,所以可以在Auto Layout工作之前设置frame。然后系统会根据frame自动生成约束,然后就跟在IB里创建的view一样了,都一起走update constraints --> layout -- > draw 这么个流程,在IB里创建的对象IB会自动关掉translatesAutoresizingMaskIntoConstraints,因为在IB里设置的约束已经足够定位了,这个属性就多余了。另外如果把某个view的所有在IB里创建的约束都去掉,并且也不开启translatesAutoresizingMaskIntoConstraints的话不知道会怎么样,没尝试过,不过应该会导致程序崩溃
2014-12-03 15:36:34 +08:00
回复了 jox 创建的主题 iDev 哎, auto layout。。。。。
@hrx00747 其实还有第三种方式,可以在IB中定义约束,然后IBOutlet这些约束,然后在代码中根据情况修改这些约束的值,在设计界面的时候不能确定动态加载的对象的定位,比如同一个view,包含控件ABCD,A和D在所有的场景都会出现,B和C各自有各自的场景,比如table cell,因为cell需要被重用,有些cell需要显示B,有些需要显示C,D的定位依赖于B或者C的定位,这时候只需要设定D与A之间的关系,通过判断当前显示的是B和C来调整D与A之间约束的constant,不显示的就隐藏,这样就免去了在代码中创建对象和约束对象的开销,效率上和代码上都简化了。
在写程序的时候递归和循环在表达力上是等价的 可以互相转换 有些递归需要记录每次递归开始时的状态 如果使用循环可以借助创建用户栈来记录这些状态来模拟递归 这样在内存占用上循环没有太大优势 但是在缺少尾递归优化支持的时候依然会减少函数调用带来的支出 不需要记录状态的问题 在有尾递归优化的时候循环在效率上的优势是微乎其微的

但是有些问题用递归解决很自然 比如树的遍历 比如需要divide and conquer策略的算法 有些问题用循环解决很自然 比如列表的遍历
这样的时候选择最合适的手段解决问题是很自然的 让编译器去做优化工作就行了 但是因为大多数时候递归的程序都很简短和优雅 所以有些人会偏爱递归
python不支持尾递归优化 循环只需要当前栈 递归会创建多个栈 但是循环的本质是递归 循环能处理的问题递归也能处理 递归能处理的问题循环只能处理一部分 使用python不需要考虑性能 尤其是新手 当性能成为问题的时候再考虑优化 绝大多数场合没有考虑递归与循环那个效率高的必要
2014-12-01 23:15:54 +08:00
回复了 zhouitpro 创建的主题 macOS Mac 下面求款好的终端
why the fuck does nobody mention totalterminal.app?!
2014-12-01 19:50:38 +08:00
回复了 rcmerci 创建的主题 iDev 开始学 ios 开发
@rcmerci 是的,我觉得理解iOS的各个组件是如何工作的,开发者可以怎么灵活地应用苹果为开发者提供的这些组件,这些是更重要的,但是这却是不容易的,要阅读大量的资料,并且需要不断地实践和从错误中吸取教训。

如果非要选择编程语言的话,假如现在的我要学习iOS开发但是既不会obj c也不会swift,我会选择obj c,因为我是机会主义者,新出来的编程语言都要观察一段时间才会好用甚至能用,现在我只用被证明可以经得起考验的编程语言来构建我的应用。另外obj c表达力足够,该有的都有,并没有太严重的缺点,完整的高级抽象类型,第三方的代码库,一些好用的设计模式的支持,同时兼容C可以直接调用底层的C接口,哦,别忘了还有可爱的lambda,可能是我接触时间还不够长,我不明白apple开发swift的动机是什么,难道是因为obj c太啰嗦了?
2014-12-01 19:17:35 +08:00
回复了 rcmerci 创建的主题 iDev 开始学 ios 开发
这是一个垃圾问题,但是现在很无聊。

我的建议是swift也好,obj c也好,都无所谓,能写出好的应用就是胜利,另外既不会obj c也不会swift但是倾向学习swift的新手们是不是大多数之前就没有多少编程经验呢?

之前有过其他平台编程经验的朋友也会更倾向于学习swift来学习iOS开发吗?如果是,理由是什么呢?如果只是为了用来开发应用的话,学习obj c用不了多少时间啊,我只花了不到半天的时间看了下苹果的这个文档:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html

基本上就没有再看过关于obj c的资料了,在学习iOS开发之前我学习过C,JavaScript,python,lua,emacs lisp, scheme 还有个我一下想不起来名字了,只用过前三个做过实际的项目,其他的都是因为需要读某些源代码以修改软件的配置或者看书的时候才了解了一下,达到目的之后就没再接触过了,其中就C花的时间最长,花了好几个月,因为是第一个学的编程语言,而且还得学习硬件相关的知识,我反正觉得如果只是开发普通的web或者移动应用的话,我已经不需要花很长时间来学习某个编程语言了,觉得都差不多
2014-11-30 11:47:33 +08:00
回复了 jox 创建的主题 iDev 关于 Auto Layout 和 Scroll View
因为使用auto layout必须得调整view hierarchy才能配合scroll view使用,在有scroll view的地方我还是使用frame来布局,但是动态加载的view使用了auto layout,因为原本需要动态加载的view里面有很多控件,使用frame来布局很麻烦,需要写很多的代码来定位和调整尺寸以及间隙,使用auto layout就简单多了,这样在整体布局上因为主要就只有几个大的彼此独立的section,所以即使使用frame来布局也不会很麻烦,要想让auto layout和frame共存,trick就是对在storyboard里创建的对象使用

setTranslatesAutoresizingMaskIntoConstraints:NO

动态加载的view对象默认的translatesAutoresizingMaskIntoConstraints的值就是YES,所以不用管,直接设置frame的话在update constraint的过程中auto layout会自动生成需要的constraint
2014-11-29 14:01:27 +08:00
回复了 jox 创建的主题 iDev 关于 Auto Layout 和 Scroll View
@black 非常感谢

额,this makes me sad : (
2014-11-29 09:15:28 +08:00
回复了 jox 创建的主题 iDev 哎, auto layout。。。。。
@WildCat thanks man.

昨晚睡觉前我打开了一坨的网页,其中一个就是那个,当时实在太困了就把电脑扣上了,打算今天好好研究一下

http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html

这个是objc.io的资料,里面有讲到layout process,虽然还没看,但是感觉也不错,如果有人对auto layout感兴趣可以看看。

auto layout能够减少大量的定位和计算尺寸的代码,以前如果打算对一个view的subview做flow式的排版,得反复计算frame,每个subview至少都要五六行代码,使用auto layout的话只需要修改subview的内容就行了,不用考虑layout,如果能整明白的话确实会让开发简单不少,希望我能整明白。。。
@ld0891 我的意思是regex不能匹配递归定义的语法,而html的语法就是递归定义的。当你需要将使用html标记的数据转化为一般的字符串或者像浏览器那样显示的话,regex没办法解决,必须使用专门的parser,举个例子,你要写一个论坛的客户端,该论坛的API返回的数据是html,有的时候会遇到这种结构:

<div>hello <div>@ld0891</div></div>

有的时候是这种:

<div>hello <div>@ld0891</div> how are you doing <div><b><i>today?</i></b></div></div>

甚至是更复杂的结构,你不可能使用regex来匹配这样的字符串,但是如果这个论坛返回的html只有两种结构,一种是只包含text的:

hello @ld0891

一种是带img标签的:

hi @ld0891 have an upvote: <img src="upvote.gif">

这样的情况你用regex就无所谓了,但是这种情况并不多见
hpple返回的数据结构里,好像只有text和br是没有子节点的,img有没有子节点忘记了,你可以看看,就这三个比较特殊,其他的全部都有子节点,

我拿你的例子试了一下,这是代码:

--

>>>> html = @"<a href=\"javascript:;\" dataitem=\"name_付之一笑\" >@付之一笑</a>";
>>>> TFHpple *parser = [TFHpple hppleWithHTMLData:[html dataUsingEncoding:NSUTF8StringEncoding]];
>>>> TFHppleElement *body = [[parser searchWithXPathQuery:@"//body"] firstObject];

--

这是截图:
http://ww2.sinaimg.cn/mw1024/005PvGBPjw1emr4mljcwhj314a0g7q5y.jpg
@q84629462 不是吧,应该是这样的结构:

{
tagName:a,
{
href:javascript,
dataitem:name_付之一笑
},
children:{
tagName:text,
content:@付之一笑
}
}

你再好好看看
@q84629462 hpple就是把所有的html节点都解码成一个个的objective c对象,原来是什么样的,转化完就是什么样的,hpple本身不会识别任何类型的html tag,它做的工作只是解码,或者叫parse,真正做翻译或者识别的是开发者自己的工作。

就好像解析json一样,你得到一个json字符串,丢给json的parser让它解码,具体这个json有什么东西parser是不关心的,它只关心你丢给它的输入是否是合法的json字符串,如果不合法就会报错,合法就返回给你一个json的数据结构。hpple也是一样的道理,你得到一个html字符串,你丢给hpple,hpple返回html的dom给你,你得自己遍历这个dom才能得到你想要的数据。你想让hpple来识别就好像在要求json的parser识别某个特殊的json key一样,一般情况下是不可能的。

hpple算是用起来很简单的了,你看看tfhppleelement.h里面都有什么方法,一般就用children得到子节点列表,objectforkey得到某个特殊的html属性,tagname是tag的名字。
2014-11-28 17:39:23 +08:00
回复了 glasslion 创建的主题 程序员 谁说 GitHub 是程序员最好的简历?
。。。。。。只是个名字啊,既可能是本人,也可能不是本人,而且,不管是不是本人,我没觉得这个有什么了不得的啊,又不是ken thompson本人跑过来开讲座能跟他面对面交谈合影啥的,更不是当他的学生,what's the deal??
@ld0891 我没明白你的意思,对于html这样的语言,regex的适用范围是很有限的,而且我认为试图使用regex来匹配结构复杂的html是非常容易出错的,我不清楚你要parse的html是怎样的一种情况,regex只能匹配结构简单的html,以discuz代码为例,我用过的discuz可以处理这样的递归语法:

--

discuz_content: text discuz_code
text: "plain string"
discuz_code: [discuz_tag]discuz_content[/discuz_tag]
discuz_tag: quote
discuz_tag: font
... discuz_tag list ...
discuz_tag: img

--

经过discuz的处理,可以出现任意递归深度的html,这种情况你是没办法使用regex来处理的,regex只能处理保证不会出现递归结构的html。另外你一直在强调xpath的问题,这点也让我感到很困惑。如果需要将html整个转化成NSAttributedString,我一般只需要用到少数几个很简单的xpath,用"//body"得到了dom树之后遍历一下就是了,如果碰到一些tag会使用固定的结构,也都是一些很简单的xpath,我似乎还从来没遇到过需要从一长串html中寻找某个特殊的tag以获得特定的数据的情况,我能想到的似乎只有爬取所有的超链接,或者爬取某个页面的某个特殊tag的内容,这些都很简单啊,html/css怎么定位xpath就怎么定位呗,一般这样的tag都有id属性,很好找啊。
@ld0891 你的意思是tag混乱的网页也要使用regex来匹配吗?有些discuz的tag是嵌套的,并且block element嵌套在inline element这样的情况也有,这样的场合使用regex会很麻烦,有些语法regex根本没法匹配,regex不是用来匹配html这样的语言的,除非你确定你要匹配的html使用的tag种类非常简单并且没有嵌套且一定是语法准确的html,大多数情况下你都需要使用功能完善的parser来parse html。

NSRegularExpression是如何实现的我不清楚,hpple只是一个轻量级的libxml的wrapper,libxml是用C写的,libxml解析xml和html的速度非常快,我只用regex来匹配一般的字符串,所以不清楚regex如果用来解析它能够解析的html速度会快多少,使用hpple我觉得性能完全不是问题。
2014-11-27 22:03:12 +08:00
回复了 F2Sky 创建的主题 分享发现 开动乃们的大脑回答这个问题
最上面那个吧 最下面排除的原因是如果从下面翻到窗外很难爬到上面,剩下两个里最上面的男人拿的武器是手枪,根据屁股上的绷带来看,应该是被捉奸之后逃跑的时候打到屁股上的
2014-11-27 21:57:34 +08:00
回复了 F2Sky 创建的主题 问与答 优酷能不能给个说法?
@F2Sky 一般如果要加班的话会提前打招呼的 其他时间如果找我有事情一切都等到我人到单位了再说 我工作就是混日子 我负责的工作也不是很重要 能偷懒就偷懒 所谓的死猪不怕开水烫 哈哈
2014-11-27 21:28:54 +08:00
回复了 F2Sky 创建的主题 问与答 优酷能不能给个说法?
@cloudlau 嘿嘿 这个好像挺容易的 丫也就是个底层员工 街边小卖店卖的那种电话卡也是匿名的 可以整个用来进行网络活动 不然老有莫名奇妙的短信和电话啥的打到我的私人电话上 广告 诈骗的 还有卖东西的 烦死了 同样的技术还可以用在工作上 私人电话号码不告诉同事和上司 额外整个电话工作用 只要不是工作时间保证不会被工作的事情骚扰 老板也拿我没辙啊 哈哈
1 ... 4  5  6  7  8  9  10  11  12  13 ... 21  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1433 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 17:21 · PVG 01:21 · LAX 10:21 · JFK 13:21
Developed with CodeLauncher
♥ Do have faith in what you're doing.