精华内容
下载资源
问答
  • Control键是所有类Unix系统(Mac, Linux)下一个非常有用的按键,但也是一个经常被忽视的按键,特别是在Mac平台下,Command键完全代替在Windows平台下的Ctrl键,很多人清楚为什么Apple又额外加一个Control键,...

    转载于:https://ghui.me/post/2016/05/use-of-control-key/

    Control键是所有类Unix系统(Mac, Linux)下一个非常有用的按键,但也是一个经常被忽视的按键,特别是在Mac平台下,Command键完全代替了在Windows平台下的Ctrl键,很多人不清楚为什么Apple又额外加了一个Control键,我想这和著名的Emacs编辑器有关,Emacs下有很多方便的快捷键,其中很多都需要用到Control键,Mac系统就原生继承了很多这些快捷键,下面就根据我在实际开发过程中遇到的具体情况来总结一下如何用好Control键,效率真能提高不少。

    Control的常用组合键

    移动类

    • Control-F 前进光标 (效果同右方向键)
    • Control-B 后退光标(效果同左方向键)
    • Control-P 光标上移(效果同上方向键)
    • Control-N 光标下移(效果同下方向键)
    • Control-A 光标移动到行首
    • Control-E 光标移动到行尾

    删除类

    • Control-D 删除光标后面的一个字符
    • Control-H 删除光标前面的一个字符
    • Control-K 删除当前行光标以后的所有字符
    • Control-W 删除光标前的一个单词
    • Control-U 删除当前行的所有字符

    其它类

    • Control-T 交换光标两边的字符
    • Control-L 清屏(仅适用于终端下)
    • 待补充…

    一些常用场景

    1. 通常情况下,上下左右键都远离主键盘区,如果在你高速打字的过程中需要移动输入光标位置,这个时候直接通过上下左右键就不得不将右手移出主键盘区,就会降低输入的速度,通常这个时候你就可以通过Control的组合键达到快速移动光标的目的。再比如你在一些IDE(Xcode,Android Studio等)里面选择代码补全的不同候选项时,就可以通过Control-PControl-N来达到切换选择不同候选项的操作.

    2. Mac的键盘上没有HomeEnd键, 如果你想将光标快速移动到行首与行尾就比较麻烦(当然你可以通过Command与-> 或Command与<-实现,但这样你又需要去操作方向键, 方向键远离主键盘区, 速度势必会降低), 这时你就可以通过Control-A 与 Control-E实现, 这两个组合键非常适合在终端下使用

    3. 有些时候你在终端下输入了很长的命令, 但发现输入有误, 需要完全删除重新输入, 通常情况下你都会使用Delete键去做, 但Delete只能一次删除一个字符, 速度很慢, 这时你就可以通过Control-U键快速的达到清除当前所有输入的目的, 再比如你当前的输入只有从中间某个位置向后是错误的, 这时你可以通过Control-BControl-F将光标移动到对应位置, 然后再利用Control-K快速达到删除当前光标后所有输入的目的

    4. 在输入的过程中如果发现个别字符不对需要删除重新输入, 你当然可以通过Delete键达到, 但 Delete键和方向键一样有点远, 更方便的你可以通过Control-D 与 Control-H实现, 还有些时候错的不是一个或几个字符,而是一个或几个单词你可以Control-W达到

    5. 在终端下如何清屏? 很多人都是通过输入clear达到, 但如果这时你终端里正输入的有一条待执行的命令,这条命令的输出可能有很多你想清一下屏后再执行, 你怎么办,总不能删除当前命令后再输入clear命令, 然后再重新输入刚才的那条命令吧, 其实这时你可以通过Control-L组合键达到目的,这个差不多是我在终端下用的最多的一个快捷键了.

    交换Control与Caps Lock键的位置

    其实看了上面那么多介绍, 你可能并不以为然,并不觉得Control键有多方便, 那是因为你的Control键并没有那么容易按到, 如果可以把Control键放到一个很容易按到的地方就万事大吉了, 其实键盘上有另外一个很容易按到的按键 Caps Lock键, 这个按键并不太常用, 你完全可以把ControlCaps Lock这两个键做一下交换, 或者干脆把Caps Lock键也映射为Control键,并不做交换,而是完全弃用Caps Lock键. 下面说一下如果在Mac平台下替换这两个键:

    打开Mac的 系统设置-键盘-修改按键 具体如下图:

    至于Linux下如何做, 大家可以自行Google, 之前我做过, 设置起来没有Mac下方便, 但也是可以实现的.

    后记

    • 正是因为Control键这么好用, 有些知名的键盘(比如我正在用的HHKB)就默认将Control键放到了Caps Lock键的位置, 这样就可以直接使用,不用再做额外设置.
    • Control键好按了, 很多Vim下的快捷键用起来也会更顺手比如 Control-R反撤销, Emacs下的就更不用说了
      hhkb type-shhkb type-s
    展开全文
  • 我写个贪吃蛇程序,c++ + windows编程写的,左边是游戏区,右边有暂停,加减速等按钮,刚开始可正常操作贪吃蛇,但是在按下按钮后再上下左右操作就没反应知道为什么?求大神解答 #include #include #...
  • kmtune //HP-UX下kmtune>kernel.txt将内核参数信息导出到kernel.txt文件中配置文件: /usr/conf/master.d/core-hpux ##操作系统 //操作系统版本 uname -a //操作系统补丁 instfix -i|grep ML //获取硬件信息 ...
  • 现象:最近我安装Windows XP操作系统,我知道在启动时按F8或当计算机能正常启动时,就会进入Windows XP启动的高级选项菜单,在这里可以选择除正常启动外的8种不同的模式启动Windows XP。请问这些模式分别代表...
  • 为什么运行一段时间后,窗体就会变成白色呢?这个问题我困扰很久,解决的话,下面我就难以实行其他功能!我是个新手,请大家多多指教!有图有源码! #include "stdafx.h" #include "俄罗斯方块游戏2.h" #...
  • 键盘上每个作用!!! (史上最全的)­ F1帮助­ F2改名­ F3搜索­ F4地址­ F5刷新­ ...本文转载自:涛哥: 键盘上所有快捷键,看后悔100% 有用­ QQ邮箱阅读空间订阅涛哥­ 什么是阅读空间?­
  • 为什么 豆瓣FM是一个非常棒的应用,但是官方没有提供桌面端,虽然使用浏览器听歌也很好,但是在某些情况下胡很麻烦。如果要切歌场景,就需要先切换到浏览器,再找到豆瓣FM来进行切歌,操作不够方便。桌面端很好的...
  • * 向session添加标识键为“xhs-upload”的属性,将请求对象作为属性值传入。这有两个作用:                  * 1、将xhs...
  • lcd也什么显示,只因为调用SIM900A()这个函数,是不是频繁进入中断影响超声波传感器的运行??? 总之,求大佬给一个SIM900A发送中文短信的正确程序(的是...
  • iPhone开发日常

    2010-06-24 17:43:51
     使用Mac操作系统太习惯,它很多组合建都是用到Command,但项目组没钱买Mac真机,都是的破解,Command似乎是被映射Alt键了,那么平时常用的复制就成Alt+C,粘贴自然就是Alt+V,切换输入法也变成Alt+space...

           记录一下平时开发工作中的一些经验和问题解决的积累,仍然是没什么体系可言。有些是转自项目组的集体智慧。

     

            使用Mac操作系统不太习惯,它很多组合建都是用到Command,但项目组没钱买Mac真机,都是用的破解,Command似乎是被映射为Alt键了,那么平时常用的复制就成了Alt+C,粘贴自然就是Alt+V,切换输入法也变成了Alt+space,虽说是习惯就好,但每每回家用自己的机器按下错误的快捷键时也挺烦躁的。下文中所有说道Alt的地方应该都是指Command键。

     

            胳膊拗不过大腿。现在使用的IDE是Xcode,经历过Visual Studio到Eclipse的镇痛之后,我立刻修改了Xcode的快捷键,主要还是使用了Eclipse的风格,而且把复制粘贴都改了,但很快就不爽了,当我一次次把网页里的代码Alt+C复制过来,再用Ctrl+V粘贴到Xcode里后,终于忍不住还原了Xcode的复制粘贴快捷键。

     

            Finder的不习惯。对着文件夹按回车不是进入文件夹而是改名,文件夹层次的前进后退是Alt+[],一般来说不提供剪切功能,如果同一个盘里拖拽就是剪切,但是不同盘间拖拽则是复制,按住Alt则可以做到剪切,平时每次都是在两个Finder窗口里面拖拽,所以对于"把文件转移到上层文件夹"这项常见操作我深感苦恼。还有文件名字可以在前后留空格,这也导致了一次艰难的debug。按理说Mac操作系统是Unix的,但其实文件不区分大小写。。。

     

            程序退出的不习惯,按Alt+Q只是退出窗口,按Alt+Q才是退出程序。搜索功能似乎也很怪,不是在当前目录下搜索而是全盘搜索,而且偶尔会毫无反映,听说这个要怪到黑苹果身上,因为没有提供索引功能。

     

            Objective-C有吸引人的特性,也有恼人的地方。类别与代理设定的就很好,但内存回收机制我觉得里外不是人。信息的隐藏似乎是面对对象设计语言的本能,当在java里看到一个很棒的类想拿过来复用却发现了final关键字时不知你有什么感受,特别是这个类还在一个庞大的package里的时候;同样,虽然类别可以随意扩展你能看到的类了,但遇上已经是类别的类的时候你还是一筹莫展。代码的混写很爽但也可能造成问题,不过问题都是程序员造成的,但好处确是语言设计者带来的。

     

            混写代码中对着空指针做delete会崩溃,其他情况不清楚。

     

            文件不知道能不能层叠展示。

     

            Cocoa提供的图形库效果非常棒,但谁都能轻易实现的界面毫无竞争力可言。

     

            Objective-C的内存管理。在单个函数里自己写了alloc就要自己release,当然也可以设定为autorelease;属性里设定为retain的实例变量要在dealloc函数里release,如果不采用属性的get,set方法,那么应该这样实现

    - (void)setData(NSObject *ob)
    {
            [ob retain];
            //obj是实例变量
            [obj release];
            obj = ob;
    }

     对于返回值是alloc或copy对象的函数,设定为autorelease,使用返回值的地方不需要再release;delegate对象不要设定为retain;autoreleasepool不推荐使用drain,而是在必要的时候release再alloc;对于工厂方法获得的对象不要release。

     

            Xcode的源码组织不是像eclipse那样按照文件夹层次来的,可以随意把文件从不同的group拖拽,但却不影响文件本身的位置,不过把有层次的文件夹直接拖拽加入到Xcode里,那是会保留原有文件层次的。

     

            界面编程时发现对控件操作毫无反映,请先检查是否把Interface Builder上的对应的线拉起来了。所有控件事件的函数声明一律为(IBAction ) funcname:(id)sender;不过后面的参数也可以省略,不过这样就没法复用了。

     

            目前的线程操作我主要选择NSThread,起线程

    [NSThread detachNewThreadSelector:@selector(VolumnTask:)
                                                             toTarget:self
                                                        withObject:nil];

     那么就可以在本实例里的VolumnTask函数里执行了,如果想做Windows形式的静态回调函数,那么注意把函数声明为静态,同时toTarget的参数写成xxx class。

            还有个很奇怪的问题,如果在线程的函数里写autorelease的变量,比如NSNumber的工厂方法numberWithFloat,那么这个变量会无法自动释放导致内存泄露,提示类似"NSCFNumber, no pool in place - just leaking",解决的方法没着到,只好用了普通的构造方法然后手动释放。现在想想可能需要在线程函数里套上NSAutoReleasePool,这也是NSOpertation的通用做法。

     

            Objective-C的协议与Java的接口有点相似,不过语法稍微繁琐了些,比如我一开始想写一个返回满足某协议的工厂方法的时候就怎么都写不出来,翻了翻书根据满足协议的变量的定义形式再猜一下,Recordable自然是协议名,大致就是这样

    + (id<Recordable>)getRecordDevice:(NSString*)deviceName;

     

    有句话我忍了很久了,但我已经忍不住了

    和eclipse相比,Xcode就是一垛屎!!!

    后注(2011.02.25):现在熟悉了Xcode的各种快捷键加gdb的整合之后,觉得不能太算一垛屎。。。

     

    刚才遇到一个小问题,而且这个问题不是第一次遇到了,那就是如果在iPhone程序里读取资源,但资源名大小写弄错了,那么在iPhone模拟器上是可以读到的,但iPhone真机上就读不出来了,同时在Interface Builder上其实也是显示不出来的。还是一个奇怪的问题,一些图片用UIImage的imageNamed方法在iPhone4上就可以读取,但在3上就不能,我找了半天原因比如图片路径啊,大小写之类,最后才发现原来是我没写图片的后缀名,而在4上是可以不写后缀名的,但之前的版本必须写。同时4上不写后缀名还有显示高清图片的考虑,这个就不说了。

     

        根据项目要求,单元测试对函数覆盖率必须达到90%以上,这对于一个iPhone业务软件确实是困难重重,如果是真心想满足而非糊弄的话。

        拒绝泛泛之谈,困难到底出在什么地方我一个个列出来:

        1.测试框架,使用的还是基于SenCaseTest的编译期静态测试的方法,所有调用到iPhone系统运行时间的功能的函数全部失效,比如NSUserDefaults设置获取键值。当然这个应该是可以处理的,因为我记得Apple提供的测试框架本身就有两种。

        2.Objective-c语言本身的可测性,如dealloc函数应该是用户对想要释放的对象调用release后满足使用计数为0时系统调用,但如果要测试这个函数也不是不能直接调用,可调用之后要如何验证dealloc的有效性呢?就如同测试c++的operator delete,如果成功调用了,那么对象里的内容全部失效,再调用该对象的任何数据将导致访问违例,如果是抛出异常倒还可以可以,可EXC_BAD_ACCESS没法拦截啊。

        3.iPhone界面框架的可测性,最常见的如viewDidLoad要怎么测,理论上是该视图确实需要加载的时候才会被调用,同样可以强行调用,不过完全可以想象,iPhone在主动调用viewDidLoad的时候一定已经做好了一系列的事前准备,比如初始化好视图上的控件之类,而我自己强行调用想通过检测视图上的控件来测试显然是行不通的。其他种种因为iPhone完善的界面回调和委托机制所以写得很方便的界面相关函数统统变得无法测试。打桩异常困难,实际上我没找到iPhone上的mock项目,那么参数都无法正确的传入又要如何进行测试呢?比如我想测试点击按钮后做事,形如- (void)click:(id)sender;的函数当然还是可以强行调用,在当前测试框架下显然是不能创造出sender的button啦,自己在测试代码里alloc一个也可以,但这样又要如何测试点击的逻辑正确性呢?如何测试是否把点击事件关联错误了呢?显然这都是不可能的。

        4.我自己写函数的可测性,在项目开始的时候,我正好在je上看帖子,有一个将函数全部缩短到3-5行的争论深深影响了我,加上我本身就有一些不愉快的敏捷开发实践,一方便可以说对敏捷开发的好处有了一些认识,又对很多人对其的不实之词深恶痛绝,但又苦于有理论无更细化的动作,此时就决定从减少函数行数做起。必须承认这个做法是相当明确而有效,在不断的缩短和抽取函数的同时,将流程和模块功能逐步深入头脑,无论是编码还是调试都快了很多,在代码的美观性上也无可比拟,所谓的代码规范的问题间接就消失了,三五行的代码怎么可能出现变量名覆盖或者圈复杂度等问题呢。但这样短小的函数在测试时相当头疼,首先是函数太多了,其次是很多函数根本就没有返回值,因为函数里的所有语句都没有返回值,这对于功能连结紧密的三五行代码是很常见的事。

     

    如此,想做到真心完成单元测试覆盖率看来是要付出很多努力了。

     

    大家都知道app其实是个文件夹,如果在shell里直接运行的话还需要逐层进入其内部,而且不同打包方式的app可能内部结构还不同,其实用open命令就可以自动打开其运行程序了。不过对于一个常用的抓包软件WireShark这些必须要用sudo层层开打包最后直接打开的程序,用open还是没法直接获取网卡。

     

    Finder用Alt+向下箭头就是打开,包括打开文件夹,各种文件等等,我用了半年总算找到这个快捷键了。Alt+向上箭头就是返回上一层目录,是上一层不是后一层。

     

    Xcode的语法检测由于Objective-C的语言特性显得非常弱,比如一个id类型的元素,可以对其发任何本项目中有的消息而不会有任何警告,当然你随手写根本没有的消息还是会警告一下的,所以即使需要用id类型,也尽量使用id<interface>这种声明形式进行静态检测。奇妙的是不同的类的方法还不能单纯的返回值不一样,否则会警告,明明是在不同的类里面。

     

    在Mac平台上有一个非常优秀的流程图绘制软件Omni Graffle,它功能强大而且上手简单,很轻松就可以绘制出惊艳的流程图,而且它扩展起来也很方便,特别是grafletopia 这个网站,有着相当多的模板扩展,我特别喜欢它的UML 2.1 CollectionUltimate iPhone Stencil ,安装的时候可以直接点击扩展包打开,然后在模板界面上点击安装按钮,或者拖拽到用户目录的

    ~/Library/Application Support/OmniGraffle/Stencils/中。

    改变UISwitch的标签并不是一挥而就的,根本就没有提供直接的方法,你可以重写,然后设置左右的Label,也可以用这个找来的很简单的方法,但这不保证以后一定能用
    [(UILabel *)[[[[[[sw subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0] setText:@"关"];
    [(UILabel *)[[[[[[sw subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1] setText:@"开"];
    出处是CocoaChina的beauseJour
     
    NSArray等容器没有自动装箱功能,所以自然没办法添加NSInteger,这时就是类别大展身手的时候了,不过就光addInt这种方法并不完备,你还得intAtIndex,特别是indexOfInt这些方法,因为没有c++的重载==运算符,或java的重写equals和hashCode方法,只好先取出来在对具体类型做比较,确实挺傻的。不过就这个需求而言,我宁可用类别而非别的方法。

    对象的dealloc中必须要调用super的方法,那么请把super方法放到最后调用,否则可能会产生父类归属的对象已经被释放了而你继续使用的问题,当然你确保super的dealloc方法和你后续要操作释放的变量没有关联那写前面也无所谓,这只是一条指导意见而已,不过为了确保安全还是尽量这么实行。

    NSArray等容器类在释放的时候不需要先移除内容,直接release就会自动释放所有成员,想想也是,NSMutableArray还能removeAllObjects,可NSArray根本没法移除内容啊,自然只能在数组的release时候释放数组元素了。不过容器的添加自动retain特性有时候也不是好事,比如我可能有不定多个委托,如果将其放入容器就对其增加了引用技术,但委托和被委托对象是没有从属关系的,这在结构上就不对,所以看源代码也可以看出来,一般delegate的属性都写成assign的简单赋值,当然这个多委托设计可能是我在根本上错了,现在正在思考。

     

    Objective-c的指针和c语言指针是一样的,NSString* s1,s2;那么s2就定义错误了,不过至少编译器会马上报警。同样你也可以对Objective-c的指针做typedef以方便敲代码和防止类型错误。

    原来在Objective-C里可以直接用->取成员变量,我开发了这么大半年竟然都不知道。。。怎么说呢,只能认为自己太不上心了,两年前转java的时候那个学习激情再也没有了。

    看了一下以前的Objective-c的数,感觉2.0确实增加了很多便利方式,比如property就很方便,还有以前的版本竟然如果把类别方法隐藏就会编译错误,现在即时发送一个根本不存在的消息也不过是个警报而已。

    不定参数的时候,一般使用nil作为参数传递完毕标志,不过万一动态运行中获取参数往函数里传,其中有参数为nil就完了,后面的数据就塞不进去了,当然你可以用NSNull替代,单也很麻烦,写个类别专门为了处理nil挺累人的,而且这样就要va_args宏了,我到现在也没看懂。。。

    NSMutableArray添加相同的对象可以反复做,不过移除的话就会一下子把这些对象全部移除。包括只是数值上一样的不同NSNumber对象。

    NSMutableDictionary似乎已经对NSNumber做了特殊处理,即使alloc出来的不同对象,只要其中数值一样,那么添加的时候只能添加一个,同样,通过NSNumber做键取值的时候,完全可以创建出新的NSNumber对象,那么一样可以获取到之前的键所对应的值。看起来就像重写了==或者equals方法一样。

    id这个关键字是可以做变量名的,很奇怪。当然犯懒的时候用就是了,可如果你声明了名为id的变量,如函数的参数名,那么这个函数里面所有需要obj-c意义的id关键字时都无法正确识别了,所以大工程里还是少用吧。

    NSString的stringByAppendingPathComponent很好用,可以自动添加必要的或取出不必要的分隔符,主要填入每个路径的组成部分即可。

    如同c语言里不写参数或返回值类型就默认为int类似,objective-c里则是默认为id,不过id类型到底什么意义我还需要深入了解。

    把view变成圆角

    这里用到了Core Animation相关的内容

    首先在工程里添加一个Existing Framework,把QuartzCore.framework添加进去

    然后在需要圆角化的代码里引用对应头文件,然后用如下代码实现圆角效果

     

    -(void)roundCorner:(UIView *)targetView withRadius:(CGFloat)radius
    {
        targetView.layer.cornerRadius = radius;
    }
    
     

    其中两个参数:

    targetView是要圆角化的目标view,可以是任意UIView的子类

    radius是圆角的半径,可以用此参数调整圆角程度


    使用posix创建的线程里不要使用 AutoRelease释放内存, 否则程序肯定会出现core或者僵死

    合并模拟器和设备的两种静态库,当然你要实现编译好
    lipo -create /device.a /simulator.a -output /uni.a
     
    起线程的时候注意一定要在方法如main前后包夹NSAutoReleasePool,不然会有莫名其妙的内存泄露问题,明明我在线程里根本也没做什么相关的操作。

     

    使用NSThread的initWithTarget似乎永远都是在主线程做操作,不过重新构建一个NSThread的子类,重写main之后又似乎可以到真正的子线程里了。

     

    网络url经常会将中文字符转码为utf8的,而且很烦人它竟然是直接把内存数值写成字符串字面值,转过来花了我半个小时,这里记录一下方法

    - (NSString *)encodeToChinese:(NSString *)encodeString
    {
        encodeString = [encodeString stringByReplacingOccurrencesOfString:@"%" withString:@""];
        int length = [encodeString length]/2+1;
        char *p = malloc(length);
        if (p)
        {
            memset(p, 0, length);
            for (int i = 0; i < [encodeString length]/2; i++)
            {
                NSRange r = {i*2, 2};
                const char *n = [[encodeString substringWithRange:r] UTF8String];
                p[i] = strtol(n, NULL, 16);
            }
            return [NSString stringWithUTF8String:p];
        }
        return nil;
    }
    
    NSString *s = [self encodeToChinese:@"%E7%BD%91%E7%BB%9C%E5%B0%8F%E8%AF%B4"];

     结果是"网络小说"

     

    我了割草,发现自己白写了,还做了很多假设,比如网址如果根本就是ascii编码的我就挂了,还是看标准解答吧

    (NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (CFStringRef)inStr, CFSTR(""), kCFStringEncodingUTF8);

    一行即可,其中inStr就是需要转码的url

     

    如果制作静态库,其中使用到了类别,那么调用方会在调到的时候发出unrecognized selector的运行时错误,解决方法也很简单,首先静态库的项目在other link flag里加上-ObjC,当然如果用Xcode创建的话默认都会添加上,然后在使用该静态库的项目里的other link flag加上-all_load,这样就OK了。不过这也会导致程序体积变大,同时该静态库的全部符号外露。那么如果使用了-all_load后特别是依赖了多个静态库,多个静态库里又同时使用了同一个符号的话就没办法了。注意看apple的文档 里,似乎意思是如果是mac程序或者32位的话,使用静态库的项目不需要加-all_load,但64位或iOS的必须加,我这里程序几乎都是以iOS为前提的。仔细阅读文档之后发现用-force_load也可,只需要指定那个静态库的路径就行了,还避免了有些静态库在-all_load下的链接错误。不过在实际使用时,如果使用了如上两个链接参数,类似的情况即使不是多个静态库,如果该静态库有符号与宿主项目里符号重名都会报错,暂时没有办法解决。

     

    创建文件夹直接使用

    - (BOOL)createDirectoryAtPath:(NSString *)path withIntermediateDirectories:(BOOL)createIntermediates attributes:(NSDictionary *)attributes error:(NSError **)error;

     即可,不仅是现在推荐的方法,而且看第二个withIntermediateDirectories参数,如果添YES可以直接替你层层创建好,相当便利。

     

    我今天才发现我犯了一个大错误,给self的成员赋值的时候,我忘记释放对象了,即

    self.obj = [[OBJ alloc] init];

     这下obj的引用计数上来就是2了。

     

    NSString的引用技术已经和java的string一样很优化了,显然直接的常量字符值赋值是(unsigned int)-1,而且即使用alloc后的内存空间的initWithString或类方法的stringWithString但参数传常量字面值也一样,当然如果用format或者其他高级构造方法就正常了。

     

    今天尝试给NSDictionary添加对象,观察其对象应用计数时发现,setObect:forKey:的key似乎只能用字符串,后来查了下,发现理论上只要满足NSCoping协议和NSObject 的hash以及NSObject的isEqual都可以做key,但键值管理的键应该始终使用字符串。不过我用了很多NSNumber应该也可以。

     

    控件自适应大小其实很简单,直接在IB里面设置就可以了,点击一个控件的Inspector,第三栏里面的AutoSizing里面一看就知道了,比如可以保持和上下的距离,保持左右距离,但充满中间,或者直接拉伸到头等等。反正把虚线点成实线就是要充满,中间那个是充满中部,外面也可以点上,那么就可以把和外部的距离也充满。不过我不清楚怎么设置代码创建的控件自适应大小。

     

    一直以来有个误解,以为把对象写明类型就是静态绑定,写id类型就是动态绑定,不过斯坦福教学视频里指出所有方法都是动态绑定(我猜alloc之类除外),写明类型只能让编译器加以教研提醒一下用户而已。

     

    对nil发消息,返回值如果类型是NSObject或内置类型,那么都将返回0,但是struct则是未定义的。

     

    KVO机制不错,还有它所依赖的KVC基础,但是需要仔细学习。

     

    Mac里的自带程序都很不错,比如数码测色计可以非常精确的获取颜色,黑苹果也可以用,不用每次都找美工了。

     

    UIActionSheet从最下面弹出的时候,如果正好下方有个UITabbar的话,那么被挡住的地方就没法按到,于是要把一般的[sheet showInView:self.view]改成[sheet showInView:self.view.window]

     

    很奇妙的问题,如果把UIGestureRecognizer实例化之后并添加到两个以上的view上,那么只会对最后一个view有效。

     

    构造方法一般都返回id类型,不然在子类的构造方法中如果调用父类的话,self = [super init];就会发生指针的转换警告。当然如果是单例则完全可以使用具体类型,以来方便直接用点方法,再者单例也不存在子类的可能。

     

    展开全文
  • 希望代码刷新SDI框架非客户区。非客户区有很多啊,菜单,状态栏,工具栏.....谁能帮我看看为什么我的函数街区键盘消息成功? 但是debug好像数据并没拦截到。是拦截键盘的数据的。 很

    希望用代码刷新SDI框架非客户区。非客户区有很多啊,菜单,状态栏,工具栏..都是非客户区...
    你要刷新哪个?菜单的话要用UPDATE_COMMAND_UI
    其他两个都可以获得指针来刷新但是编译还是不行。这个是什么意思?怎么解决啊?坐等解决.

    还是不行。我查了有些说是编译环境的问题?
    说是用VC.net就可以了?这个是怎么回事。。。谁能帮我看看为什么我的函数街区键盘消息不成功?
    但是debug好像数据并没拦截到。是拦截键盘的数据的。
    很奇怪,就是得不到模拟键盘传出来的数据。

    发送消息用的是PostMessage还是SendMessage,如果是SendMessage的话,是不进消息队列的

    还要确认, 消息是否通你的dlg来进行派发?

    楼主你当PretranslateMessage是钩子啊。。。。所有消息都截获的。。。
    这个函数只截获本窗体的消息

    本人是从事RS专业的,老师让先读取BMP图像数据,由于所学的C语言知识有限,刚接触这个问题不知道如何下手,请高手指点,最好能给几个例子,模仿一下。自己写的话,没得说,先看BMP文件的数据结构;其他的话可以借鉴一些现有的库,例如CImage,CxImage,OpenCV等等,总之,很基础的东西,耐心点,很容易

    嗯。BMP的数据结构已经知道,就是如何去把它读出来的mian函数不怎么会写,没有过任何经验,还有老师让我们写直方图均衡化的算法,中值滤波处理等。只能从最基础的学起,但希望能有个模板,去模仿一下,不感到太抽象。

    读bmp文件和gif,jpeg的方法根本不一样,所以你这个问题最好分开来问。

    直方图均衡化,中值滤波处理都是一些基本的图像算法,你找本vc图像处理方面的书,那上面都有代码和例子,你可以先看看

    先了解图像结构,再把图像的像素值读出来,至于数据算法网上很多这样的例子

    谢谢大家的意见!就是大家能给几个专门有编程的网站吗?最好有代码的.

    bmp和gif(非动画)都很简单,就是一个固定的头结构(按照偏移字节处理也行)
    jpg的就很麻烦的说...需要仔细理解jpg的段定义,其图元信息需要通过复杂的解析运算才能获取
    不管怎么说,都需要仔细阅读相关文件格式文档

    不同格式的图片,其结构不同,你还是先一一看下具体文件结构。

    设计一个BOOL变量,想输入就输入.或直接在属性设置只读模式.你说的不受光标影响是什么意思?是说只要是输入就直接输在最后么?

    EDIT是想从程序里输入的 , 要是用户改变了光标位置 那么从程序里输入进来的位置就改变了。
    不是都可以在编辑框的属性里设置的么?
    我创建了一个单文档Demo程序,View:CScrollView程序运行起来的初始状态

    我想要恢复到图-1那种没有滚动条的状态,应该怎么实现啊?
    我的思路是不用CScrollView。。。就用CView,自己建立坐标系。。。根据距离计算滚动值。显示图片不同位置

    我使用的是vc++6.0,但是编译出来exe运行后 文件名是什么进程名就是什么
    请教各位大侠 能不能让文件名随便改成什么 进程名都是固定的?

    不行啊 改完之后是生成的名字 把名字改了运行 进程名还是文件名

    怎么在一个窗口中选中一个指定的文件/或文件夹?
    加入现在已经进入C:/My Documents/文件夹了,
    现在我想用程序自动选中123.jpg,仅此而已。
    这个文件的名字可以任意该,如aaa.txt, ccc.dat等等,名字是参数,传递进来的。

    不明白楼主是什么需求,是让windows打开 C:/My Documents/ 然后选中 aaa.txt, 还是在你的程序中打开文档?
    如果是前面的,可以调用 
    如果是后者,就不太清楚了。如果内容是加入到CListCtrl控件中的,就可以设置某一条的记录为可选状态。
    响应WM_MOUSEMOVE涂鸦后,如何在拖动了窗口或本窗口被其他窗口遮挡过后仍然保持画过的痕迹

    记录涂鸦的每个点,在OnDraw中进行绘制。

    楼主你画图的地方要放在ON_PAINT事件里面,这样你拖动后,程序会自动帮助你触发ON_PAINT事件,这样就又重新绘制了

    恩,如果只是画个圆活矩形的话 是可以满足我说的,但是我这里是鼠标左键按下拖动鼠标画鼠标走过的轨迹,有点动态画图的意味.总是实现不了.我用了两个CPoint记录鼠标轨迹上的点.和一个BOOL标记鼠标状态,部分代码如下,请问我如何在OnPaint或OnDraw里操作
    来源:足球直播

    展开全文
  • 疯狂的程序员

    热门讨论 2012-07-18 18:05:32
    问土匪为什么?土匪说:“他太成熟。唉,年龄小,办事牢靠。” 后来,王江的爸爸到学校。绝影觉得王江的老爸怎么看也像教育部长,甚至连自己的老爹都没法比。虽然经过这几天王江的洗礼,应该算是...
  • E.7.2 我在运行ls时, 为什么到彩色? E.8 X Windows E.8.1 我听说XFree86有新的版本, 我如何安装它? 或者, 我需要安装最新版本的XFree86, 因为旧版本支持我的显示卡. 我如何安装它? E.8.2 当我startx命令...
  •  23、NTFS分区上文件属性中有个“摘要”功能,很有用的,这样一些软件安装程序 是什么东东就不会忘啊!  24、在IE的地址栏输入: javalert(文档.lastModified)可以得到网 页的更新日期.  25、通过网络共享时...
  • Linux从入门到精通

    2010-04-25 19:58:09
    E.7.2 我在运行ls时, 为什么到彩色? E.8 X Windows E.8.1 我听说XFree86有新的版本, 我如何安装它? 或者, 我需要安装最新版本的XFree86, 因为旧版本支持我的显示卡. 我如何安装它? E.8.2 当我startx命令...
  • linux从入门到精通.chm

    2010-05-17 09:11:20
    E.7.2 我在运行ls时, 为什么到彩色? E.8 X Windows E.8.1 我听说XFree86有新的版本, 我如何安装它? 或者, 我需要安装最新版本的XFree86, 因为旧版本支持我的显示卡. 我如何安装它? E.8.2 当我startx命令...
  • 《Linux从入门到精通》

    热门讨论 2008-09-04 17:05:49
    E.7.2 我在运行ls时, 为什么到彩色? E.8 X Windows E.8.1 我听说XFree86有新的版本, 我如何安装它? 或者, 我需要安装最新版本的XFree86, 因为旧版本支持我的显示卡. 我如何安装它? E.8.2 当我startx命令...
  • 11..net做B/S结构的系统,您是几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层...
  • 它能帮助你快速打开一个过的文件,当你让让别人知道你使用过什么时,就得想法子将它关掉,关掉的方法是,到HKEY_USERS\DEFAULT\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\那里新建二进制...
  • 我在《为什么说每个程序员都应该有台Mac电脑》一文中提到,Mac 秉承苹果一贯的高水准体验设计,堪称「完美」的典范。 猫哥从 08 年底开始使用 iMac ,至今从周围的小伙伴身上以及书籍资料中积累...
  • 简明批处理教程22009年10月20日 星期二 下午 05:35 最近对于批处理技术的探讨比较热,也有不少好的批处理程序发布,但是如果没有一定的相关知识恐怕容易看懂和理解这些批处理文件,也就更谈上自己动手编写,古...
  • C++MFC教程

    热门讨论 2013-05-21 13:37:15
    3、未处理的消息到那里去:M$窗口编写默认的窗口过程,这个窗口过程将负责处理那些你处理消息。正因为有这个默认窗口过程我们才可以利用Windows的窗口进行开发而不必过多关注窗口各种消息的处理。例如窗口...
  • 关於通讯的指令.........................................................................................................21 十. 编译器( Compiler ).......................................................
  • 代码语法错误分析工具pclint8.0

    热门讨论 2010-06-29 07:00:09
    Windows平台下也有好多人都喜欢SourceInsight编辑C/C++程序,如果将pclint集成到SourceInsight中,那就相当于给SourceInsight增加了一个C/C++编译器,而且它的检查更严格,能发现一些编译器发现不了的问题,可以...
  • Dos命令大全

    2013-01-08 15:33:00
    @format X: /q/u/autoset (format 这个命令是可以使用/y这个参数的,可喜的是微软留个autoset这个参数给我们,效果和/y是一样的。) 3.Goto 命令 指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。 ...
  • 现象:我刚装Windows XP,可是接下去再装毒霸就发现病毒,位于F:\WINNT\ SYSTEM32里的Win32k.sys文件,删又可删,隔离又不行,在Windows 98下或DOS下删就会导致Windows XP可启动,请问该文件是干什么用的,有...
  • VC++ 专家指导.doc

    2012-07-14 09:06:49
    (43) 为什么旋转按钮控件能自动地更新它下面的编辑控件 37 (44) 如何位图显示下压按钮 37 (45) 如何一个创建三态下压按钮 38 (46) 如何动态创建控件 38 (47) 如何限制编辑框中的准许字符 38 (48) ...
  • ,启动不了。于是我在进入Windows Me系统内,在E盘直接删除Windows XP。 但是,每次开机都出现多系统启动菜单,供选择。我该怎样才可以彻底删除 XP?  一张Windows 9x/Me的启动盘启动,在“A:”下输入“SYS C...
  • 4.当某个程序处于活动状态而我们又想将其恢复活动状态时,按“Alt+Esc”即可激活该应用程序,而不必鼠标点击程序标题栏。 5.对于存在“取消”选项的弹出窗口而言,如果你要选择取消的话,直接按ESC即可...

空空如也

空空如也

1 2 3 4 5 6
收藏数 111
精华内容 44
关键字:

为什么command键用不了了