command_commands - CSDN
精华内容
参与话题
  • 命令模式(Command

    千次阅读 2020-06-12 14:08:35
    18、命令模式(Command) 命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互...

    18、命令模式(Command)
    命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行。这个过程好在,三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行,司令员要的是结果,不会去关注到底士兵是怎么实现的。我们看看关系图:
    这里写图片描述

    Invoker是调用者(司令员),Receiver是被调用者(士兵),MyCommand是命令,实现了Command接口,持有接收对象,看实现代码:
    [java] view plaincopy

    public interface Command {  
        public void exe();  
    }  
    

    [java] view plaincopy

    public class MyCommand implements Command {  
      
        private Receiver receiver;  
          
        public MyCommand(Receiver receiver) {  
            this.receiver = receiver;  
        }  
      
        @Override  
        public void exe() {  
            receiver.action();  
        }  
    }  
    

    [java] view plaincopy

    public class Receiver {  
        public void action(){  
            System.out.println("command received!");  
        }  
    }  
    

    [java] view plaincopy

    public class Invoker {  
          
        private Command command;  
          
        public Invoker(Command command) {  
            this.command = command;  
        }  
      
        public void action(){  
            command.exe();  
        }  
    }  
    

    [java] view plaincopy

    public class Test {  
      
        public static void main(String[] args) {  
            Receiver receiver = new Receiver();  
            Command cmd = new MyCommand(receiver);  
            Invoker invoker = new Invoker(cmd);  
            invoker.action();  
        }  
    }  
    

    输出:command received!
    这个很哈理解,命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开,熟悉Struts的同学应该知道,Struts其实就是一种将请求和呈现分离的技术,其中必然涉及命令模式的思想!
    其实每个设计模式都是很重要的一种思想,看上去很熟,其实是因为我们在学到的东西中都有涉及,尽管有时我们并不知道,其实在Java本身的设计之中处处都有体现,像AWT、JDBC、集合类、IO管道或者是Web框架,里面设计模式无处不在。因为我们篇幅有限,很难讲每一个设计模式都讲的很详细,不过我会尽我所能,尽量在有限的空间和篇幅内,把意思写清楚了,更好让大家明白。本章不出意外的话,应该是设计模式最后一讲了,首先还是上一下上篇开头的那个图:
    这里写图片描述

    本章讲讲第三类和第四类。

    展开全文
  • Command 的基本用法

    2011-09-29 19:40:35
    使用 Command 对象查询数据库并返回 Recordset 对象中的记录,以便执行大量操作或处理数据库结构。取决于提供者的功能,某些 Command 集合、方法或属性被引用时可能会产生错误。 可以使用 Command 对象的集合、...
    使用 Command 对象查询数据库并返回 Recordset 对象中的记录,以便执行大量操作或处理数据库结构。取决于提供者的功能,某些 Command 集合、方法或属性被引用时可能会产生错误。

    可以使用 Command 对象的集合、方法、属性进行下列操作:
    使用 CommandText 属性定义命令(例如,SQL 语句)的可执行文本。

    通过 Parameter 对象和 Parameters 集合定义参数化查询或存储过程参数。

    可使用 Execute 方法执行命令并在适当的时候返回 Recordset 对象。

    执行前应使用 CommandType 属性指定命令类型以优化性能。

    使用 Prepared 属性决定提供者是否在执行前保存准备好(或编译好)的命令版本。

    使用 CommandTimeout 属性设置提供者等待命令执行的秒数。

    通过设置 ActiveConnection 属性使打开的连接与 Command 对象关联。

    设置 Name 属性将 Command 标识为与 Connection 对象关联的方法。

    将 Command 对象传送给 Recordset 的 Source 属性以便获取数据。

    注意 如果不想使用 Command 对象执行查询,请将查询字符串传送给 Connection 对象的 Execute 方法或 Recordset 对象的 Open 方法。但是,当需要使命令文本具有持久性并重新执行它,或使用查询参数时,则必须使用 Command 对象。

    要独立于先前已定义的 Connection 对象创建 Command 对象,请将它的 ActiveConnection 属性设置为有效的连接字符串。ADO 仍将创建 Connection 对象,但它不会将该对象赋给对象变量。但是,如果正在将多个 Command 对象与同一个连接关联,则必须显式创建并打开 Connection 对象,这样即可将 Connection 对象赋给对象变量。如果没有将 Command 对象的 ActiveConnection 属性设置为该对象变量,则即使使用相同的连接字符串,ADO 也将为每个 Command 对象创建新的 Connection 对象。

    要执行 Command,只需通过它所关联的 Connection 对象的 Name 属性,将其简单调用即可。必须将 Command 的 ActiveConnection 属性设置为 Connection 对象。如果 Command 带有参数,则将这些参数的值作为参数传送给方法。

    如果在相同连接上执行两个或多个 Command 对象,并且某个 Command 对象是带输出参数的存储过程,这时会发生错误。要执行各个 Command 对象,请使用独立的连接或将所有其他 Command 对象的连接断开。
    展开全文
  • 【iOS】真机调试问题总结 错误集合

    千次阅读 2015-05-27 10:46:35
    该文章转载于CSDN某侠客,纯属学习,原文链接:http://blog.csdn.net/luyuncsd123/article/details/25028803 1. 编译iPad真机时,选择了 Architetures:Standard(armv6) BaseSDK:iPhoneDevice3.2 TargetDeviceFamily:...


    该文章转载于CSDN某侠客,纯属学习,原文链接:http://blog.csdn.net/luyuncsd123/article/details/25028803

    1. 编译iPad真机时,选择了 Architetures:Standard(armv6) BaseSDK:iPhoneDevice3.2 TargetDeviceFamily:iPad.

    若编译出现如下错误:

    Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

    则修改 GCC4.2CodeGeneral区域中的ComplieForThumb为非选中.

    已经有了开发者证书及私钥后,可直接在越狱的手机上调试.

     

    2. 编译链接时, "_OBJC_CLASS_$_xxx", referenced from:可能需要重新建立某个类的文件.

        或者:选择项目名,在detail列表中的target列(显示为一个又圆圈),把这个文件的复选选中,或者再次选中.以把它加入到这个target里面来.

     

    3.在sdk4.0及以上使用RegexKitLite报'captureCount' was not declared in this scope错误,是在非.m文件中使用了它的原因.

       http://www.cocoachina.com/bbs/read.php?tid=38784&page=e&#a

     

    4.there is no sdk with the name or path.

       从网上down的开源代码,结果运行的时候常出现这样的错,并且在deployment中没有ios deployment target 选项.

       http://blog.aztaru.com/2010/10/05/ios%E7%AD%86%E8%A8%98there-is-no-sdk-error/

       尝试 Project/Edit Active Target/ 及 Set Active SDK菜单项,来回切换一下Active Configuration。

     

    5.常见的EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION错误,一般是因为访问已经被release的对象造成的。

    在工程中加入NSZombieEnabled 环境变量,并设为启用,则在 EXC_BAD_ACCESS 发生时,XCode 的 Console 会打印出问题描述中,设置方法:双击Executables 下的 可执行模组,在弹出窗口中,Variables to be set in the environment,添加 NSZombieEnabled,并设定为 YES,点击选中复选框启用此变量。

    可以再加入 MallocStackLogging 来启用malloc记录,以获得更多的提示来帮助定位问题。

    在gdb窗口输入 (格式: shell   malloc_history <id>   <address>)    shell malloc_history 14360x5f7fcf0, 也可以在终端中去运行 就要去掉以上的shell 指令 如 malloc_history <id>   <address>

    http://www.cocoachina.com/macdev/objc/2011/0219/2661.html

    http://www.cnblogs.com/likwo/archive/2011/02/10/1950664.html

    应该仅当需要调试内存时,才设置上述环境变量.


    在xcode4中,To edit environment variables, go to Menu Product / Edit Scheme…, select the desired configuration (you probably want 'Run') from the left sidebar first and then click on the Arguments tab. Environment variables are configurable there.

     

    6.运行一个IPhone程序时,弹出窗口说“程序运行失败,预置描述文件已过期” 。 解决办法是,在Xcode中, window-> Orgnazier -> 你的iphone ->删除带有红*的该程序之前的Profile 。 然后从Xcode运行该程序.


    7. 真机编译时报 Code Sign error: The identity doesn't match any valid certificate/private key pair in the default keychain

        修改工程和Targets的get info\build 中的code signing identity为空


    8.调试打印

       CFShow(coreFoundationThingy) will print out a description of coreFoundationThingy to the console. Output looks something like: {value = w:1186.000000 h:687.000000 type = kAXValueCGSizeType}
       If NSLog() is printing something out as an NSCFType, try CFShow().

     

    9. 编译时报 Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1,修改C/C++ Compiler Version为gcc4.2


    10.this class is not key value coding-compliant for the key viewController

    可能在创建了一个基于view的工程,而后把生成的viewcontroller删除了,但是在.xib中还有对它的引用,在IB中直接用delete键删除掉它就行了。


    11.这台电脑上已经存在一个名为“embedded.mobileprovision”的预置文件,您是否要替换么?

    http://blog.sina.com.cn/s/blog_6907b67f0100o2vw.html


    12.真机调试时报failed to upload *.app

    http://hi.baidu.com/%CB%E6%B7%E7_1989/blog/item/9649f49f805f05aec8eaf466.html

    http://www.shouyanwang.org/thread-462-1-1.html


    13.记的release时,先置delegate为nil。


    14.模拟器

         将xcode升级到4.3.1以后发现,ipad的模拟器,没有Home键了。Command+Shift+H就可以实现类似点击Home键的效果了。


    How to “add existing frameworks” in Xcode 4?

    1. In the project navigator, selectyour project
    2. Select your target
    3. Select the 'Build Phases' tab
    4. Open 'Link Binaries With Libraries'expander
    5. Click the '+' button
    6. Select your framework
    7. (optional) Drag and drop the addedframework to the 'Frameworks' group

    15.如何在Xcode 4.2 下进行 iPod touch 2代、iPhone 3G等设备的真机调试?
         http://dev.ppios.com/2012/02/%E5%A6%82%E4%BD%95%E5%9C%A8xcode-4-2-%E4%B8%8B%E8%BF%9B%E8%A1%8C-ipod-touch-2%E4%BB%A3%E3%80%81iphone-3g%E7%AD%89%E8%AE%BE%E5%A4%87%E7%9A%84%E7%9C%9F%E6%9C%BA%E8%B0%83%E8%AF%95%EF%BC%9F/


    16.编译真机提示provising文件找不到,到project.pbxproj中,把那串标识值删除。


    17.在xcode4.3上连接装有ios4.2的3gs,提示: Xcode has encountered an unexpected error (0xC002)
    No such file or directory, at ‘/SourceCache/DTDeviceKit/DTDeviceKit-1196/DTDeviceKit/DTDeviceKit_Utilities.m:798’

         http://stackoverflow.com/questions/7922308/xcode-4-2-error-0xc002-when-trying-to-use-a-jailbroken-iphone-3g-for-develop

    cd ~/Library/Developer/Xcode/iOS\ DeviceSupport/4.2.1\ 8C148a/Symbols/System/Library/Caches/com.apple.dyld/
    touch .copied_dyld_shared_cache_armv6
    touch .processed_dyld_shared_cache_armv6
    touch dyld_shared_cache_armv6
    或 
    touch .copied_dyld_shared_cache_armv7
    touch .processed_dyld_shared_cache_armv7
    touch dyld_shared_cache_armv7


    18. xcode4添加调试断点  
         在Xcode左侧断点管理窗口(Command+6)中,点击左下角+,添加add symbolic breakpoint,输入objc_exception_throw,点击done;然后右键单击该断点选择move breakpoint to,选择项目名或User,即可以在所有项目中起作用。
        还可添加输入malloc_error_break的symbolic断点,以跟踪调试释放了2次的对象。


    19.XCode内置GDB,调试时在输出窗口中使用GDB命令来调试程序。

         po 命令:为 print object 的缩写,显示对象的文本描述(显示从对象的 description 消息获得的字符串信息)。

         print 命令:有点类似于格式化输出,可以输出对象的不同信息:

         info 命令:我们可以查看内存地址所在信息

         show 命令:显示 GDB 相关的信息。如:show version 显示GDB版本信息

         help 命令:如果忘记某条命令的语法了,可以使用 help 命令名 来获取帮助信息。如:help info 显示 info 命令的用法。


    20.NSLog

        真机上NSLog会消耗资源,

        以release模式编译的程序不会用NSLog输出,而以debug模式编译的程序将执行NSLog的全部功能。

    #ifndef __OPTIMIZE__
    # define NSLog(...) NSLog(__VA_ARGS__)
    #else
    # define NSLog(...)
    #endif


    #ifdef __OPTIMIZE__
    #define NSLog(...) 
    #endif

      这个代码的魔术在于:release模式通常会定义 __OPTIMIZE__,debug模式不会。将这段代码放在头文件当中,就可以放心的使用NSLog了!

      把这些代码放到*Prefix.pch中最省事。可以把这段宏定义放到一个头文件中,再把这个头文件包含到*Prefix.pch中。

        http://lichen1985.com/blog/?p=251

       iOS中日志打印:

       自定义NSLog  #define NSLog NSLog(@"#%s##%d#",strrchr(__FILE__,'/'),__LINE__);NSLog,例如NSLog(@" begin main function"); 打印出来如下 #/main.mm##30# begin main function

       参考 http://xcodev.com/wordpress/?m=201204


    21. 错误日志目录在Mac OS X: ~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME>


          iOS Exception caught Crash Report,3种方法

          http://blog.sina.com.cn/s/blog_67b7cb7b010146qj.html

          在iPhone上捕获软件异常退出的信息,2种方法

          http://hi.baidu.com/coolwidy/blog/item/76f006896168ecb80f2444e7.html

          PLCrashReporter

          http://caydenliew.com/2011/11/plcrashreporter-the-iphone-crash-framework/

      

         http://blog.sina.com.cn/s/blog_60b45f230100tn5b.html


    22. Certificate identity 'iPhone Developer: XXXXXXXX' appears more than once in the keychain. The codesign tool requires there only be one
           出错原因:多次为同一个计算机生成私有证书,并且每次都生成了proversionning文件,下载并按照到同一个iOS设备上,那么再次编译程序到设备上的时候就会出现这个问题。
          修改方法:在Xcode中,选择菜单Window->Organizer,在LIBRARY下面,选择Provisioning Profiles.找到前面几次生成的Provisioning profiles.删除。
                            在系统的keychains,即钥匙串管理程序中,在登录下面,我的证书,删除早期的私有证书。
                            再次编译


    23.在 iOS 设备上测试你的应用

         http://www.guomii.com/posts/20637

         如果你已加入 iOS 开发者计划,你现在就可以使用 Xcode 进行真机运行、测试和调试了,直接在xcode4中操作。

         当你将一台安装了有效描述文件的设备,连接到 Mac 上时,这台设备的名称以及当前系统版本会出现在Edit Scheme的Destination 菜单中。


    24.error: failed to launch '/Users/gzty1/Library/Developer/Xcode/DerivedData/TianyaQing-chiobhpmbvwnqudfqnfawdzjrtey/Build/Products/Debug-iphoneos/TianyaQing.app/TianyaQing' -- failed to send the qLaunchSuccess packet

       重新从appstore上下载安装此软件,再删除,然后尝试真机调试




    Xcode 是苹果公司的集成式开发环境(IDE),可以同时用来开发 iOS 和 Mac OS X 应用程序。当你在 Mac 电脑上安装 Xcode 之后,同时也会安装 iOS SDK,其中包含了 iOS 平台开发所需的接口等。

       在线安装下载地址 https://developer.apple.com/xcode/index.php

       下载地址 登录进入 connect.apple.com,就可以看到下载列表


    1. 编译项目时常报如  Undefined symbols:
    ".objc_class_name_PlacardView", referenced from:
    literal-pointer@__OBJC@__cls_refs@PlacardView in MoveMe2View.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status

    这样的错误.

     

    解决方法参考下文:

    That has happened to me a lot of times. That error is caused when the compiler can't find a class or function. Besides the obvious reasons for that to happen, you should also do something like this:

    On the left of the Xcode window go to the targets, and find your application. Open it. You should see a build phase named "Compile Sources". Make sure that your implementation file is included inside that build phase. If not, drag and drop it onto that build phase.

    Also, make sure that you have all frameworks included and linked to your application! To make that sure, go into your application target again, and see the "Link Binary With Libraries" build phase. See if all necessary .framework files are in there. If not, add them using drag and drop.

     

    在项目的Groups&Files窗口中,打开Targets/项目名 /Compile Sources/把提示找不到的源文件拖到这里.重新编译.

     

    2.接上手机(版本 4.2.1 8c148a),在Organizer中,报The version of iOS  ...  does not match any of the versions of iOS supported...,重启手机,xcode都不能解决。最后,重装xcode_3.2.5_and_ios_sdk_4.2_final.dmg。

     

    3.设置字体大小:

    1)打开Preferences,快捷键是“Command +,”(注意,是三个键,按住command键,然后再快速地按“+”和“,”两个键即可)

    2)选择“Fonts &Colors”,选中所有的“Category”,然后双击“Font”一列,在弹出的对话框中选择适合自己的字体大小即可。


    4.重构

    包括重构变量名,方法名,和类名。

    选择变量名,点击Edit\Refactor\Rename...,要在输入框内输入新名字后,点Preview,然后Preview变成Apply,点击Apply。

    http://blog.csdn.net/f520131480315/article/details/6457927


    5.快照

        一般在开始重构之前要备份,选择File-Make Snapshot,Xcode会记住项目当前的状态。如果发现代码被改得面目全非,选择File-Snapshot,回到做快照的那一刻。

    如果发现提示:Snapshot Failed:A project snapshot cannot be created. 可能是一个磁盘镜像文件被损坏了,它用来存储快照,可以到~/Library/Application Support/Developer/Shared/SnapshotRepository.sparseimage 把镜像文件删掉,然后重启xcode。

        如果发现修改了某些代码之后出了问题,利用 Xcode 快照(snapshot)功能就可以轻松恢复工程到之前的状态,甚至已删除的工程也可以。快照会保存当前工程的所有状态到磁盘上,以备之后进行恢复。Xcode 的工程管理器中列出了所有可用的快照。

        可以随时手动创建快照,也可以让 Xcode 根据场合自动创建快照,例如每次构建之前或通过查找并替换修改代码之前等。

         File > Create Snapshot,输入此快照的名称和描述,点按 Create Snapshot。
此快照就会出现在工程管理器中了。要恢复到此快照,请点选 File > Restore Snapshot。


    6.help\search

     用来查找在菜单中的功能,命令等。

     

    7.在svn上增加目录时,用import.

     

    8. 修改某个文件时,弹出

    This file is not writable. You could either perform an SCM Edit operation on this file, or allow editing anyway. You may not be able to save your changes, but you will be able to Save a Copy somewhere else.

    是由于在本地锁定了文件,显示简介 ,去掉勾选已锁定。

     

    9. 制表符替换成2个空格,在编写程序代码时用空格代替Tab,可以避免由于编辑器对tab显示方式不同引起的代码错乱,是一种良好的编程风格

    Xcode Preferences->Indentation 把indent width设置为2个空格。


    10.格式化代码

        Edit - Format->Re-Indent

       在Xcode\Preferences...\ key bindings\拷贝一份xcode default\编辑Re-Indent 同时按下想要设置的快捷键。


       In Xcode 4, it's been moved to Editor (注意是Editor,不是Edit)> Structure > Re-Indent command (and has a default shortcut of CTRL+I ),默认快捷键是 Ctrl加i。它好按且未与其它快捷键冲突,所以不需要修改。


    11.打不开工程文件时,打开project.pbxproj,查找冲突mine,删除冲突标记。


    12.换过证书,提示provising文件问题,在 project.pbxproj 中查找提示那串码,删除掉这串码保存。

     

    13.xcode 4.2 svn问题

        在Respotitories中选中工程目录后,点update,弹出对话框,"Error validating server certificate for  googlecode.com:443.......",解决办法:

        比如用浏览器登录 http://code.google.com/p/.../source/checkout,复制 svn checkout https://xxx.googlecode.com/svn/trunk/ xxx --username xxx,到控制台中运行,提示Error validating server certificate for 'https://xxx.googlecode.com:443':
     - The certificate is not issued by a trusted authority. Use the
       fingerprint to validate the certificate manually!
    Certificate information:
     - Hostname: *.googlecode.com
     - Valid: from Wed, 11 Apr 2012 00:04:01 GMT until Thu, 11 Apr 2013 00:14:01 GMT
     - Issuer: Google Inc, US
     - Fingerprint: cb:f1:c8:ac:28:d5:61:b7:c1:9c:73:7e:3a:b6:bb:e2:e6:55:95:2a
    (R)eject, accept (t)emporarily or accept (p)ermanently?  输入p,开始checkout,然后到xcode中,发现也可以成功执行更新了。


      但在提交上,仍然弹出  Authentication realm: <https://xxx.googlecode.com:443> Google Code Subversion Repository
    Password for '用户名': 
    Authentication realm: <https://xxx.googlecode.com:443> Google Code Subversion Repository
    Username: svn: Commit failed (details follow):
    svn: MKACTIVITY of '/svn/!svn/act/19511c13-1823-4c4e-a551-3e0dfd8c0510': authorization failed: Could not authenticate to server: rejected Basic challenge (https://xxx.googlecode.com)


    14.在xcode4.2中,

          Product -> Profile 再选择leaks,启用内存泄漏监测。

          相比之下,Product \ Analyze 是更好的工具,它分析一些垃圾代码,及潜在的内存泄漏,并且指出精确的代码行。可以看出,它建议所有自定义函数都返回自动释放的对象,否则会被列入潜在的内存泄漏中,potential leaks。

        添加framework,

    1. In the project navigator, selectyour project
    2. Select your target
    3. Select the 'Build Phases' tab
    4. Open 'Link Binaries With Libraries'expander
    5. Click the '+' button
    6. Select your framework
    7. (optional) Drag and drop the addedframework to the 'Frameworks' group

          且在xcode4中新建工程时,去掉Use storyboards,Use ARC,include Unit Tests三个复选。


    15.  编译可执行文件时,报object file format invalid or unsuitable

           打开终端:

           sudo su 

           查看/usr/bin目录下是否存在codesign_allocate程序,如果存在,执行改名操作
           sudo mv /usr/bin/codesign_allocate /usr/bin/codesign_allocate_old

           将xcode目录下的codesign做一个软链接
           sudo ln -s /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate /usr/bin


    16. 真机调试时,提示 No provisioned IOS devices are available.Connect an IOS device or choose an IOS simulator as the destination.

          修改IOS Deployment Target,不要高于真机的版本。

    http://rainbird.blog.51cto.com/211214/646828


    17.添加预定义宏

        打开工程 Project--->Edit Project Editting(选着build)选项--->找到GCC Preprocessing->Preprocessor Macros ,例如设置其值为DEBUG=1


    18.xcode4中修改编译生成文件的位置

       File\project settings\Derived data location\,选择Project-relative,输入文件夹名字


    19. 真机调试报 error: failed to launch '/Users/gzty1/Library/Developer/Xcode/DerivedData/应用名-chiobhpmbvwnqudfqnfawdzjrtey/Build/Products/Debug-iphoneos/应用名.app/应用名' -- No such file or directory (/Users/gzty1/Library/Developer/Xcode/DerivedData/应用名-chiobhpmbvwnqudfqnfawdzjrtey/Build/Products/Debug-iphoneos/应用名.app/应用名)

         出现的原因可能是正在从appstore上安装此程序,同时又在真机调试安装些程序,导致后面真机调试安装此程序一直失败。

         解决方法:重新完成从appstore上安装此程序后,再尝试真机调试安装。

     

    20. Xcode 提供了一系列用来管理整个开发流程的工具,从创建应用到测试、优化应用,直至上传应用到 App Store。

          http://www.guomii.com/posts/20273

          原英文版地址

          https://developer.apple.com/library/ios/#referencelibrary/GettingStarted/RoadMapiOS/Tools/CreateYourAppinXcode/StartYourProjectinXcode/StartYourProjectinXcode.html

          本《iOS应用开发入门指南》译自苹果官方的 Start Developing iOS Apps Today 系列教程。

          http://www.guomii.com/posts/20250


          Provisioning Portal 配置门户

          在创建新工程向导中,Class Prefix,应用委托就会被命名为 [Class Prefix]AppDelegate


    21.Storyboards,故事板

         故事板里包含了定义此应用程序用户界面的对象、过渡(Transition)以及连接(Connection)。查看源文件发现MainStoryboard.storyboard是xml格式的内容。

         http://www.guomii.com/posts/20868

         利用 Xcode 检视器(Inspector),来观察视图控制器的状态等信息。

         需要注意的是,当选择一个视图时 Xcode 会将其高亮显示,此时画布中的颜色因为叠加可能会和 Colors 窗口中所选的颜色不完全一致。

         对齐引导线,它们能帮你轻松在视图中将 UI 元素对齐到边界或中心位


    22.IBActionOutlet

        在 Xcode 中,给某个 UI 元素添加动作并设定相应的动作方法的途径是:按住 Control 键,并从画布上的该元素拖动到合适的源文件上(一般而言就是视图控制器的源文件)。故事板会把通过这种方式建立的连接进行存档。之后,当应用运行载入故事板时,这些连接就会被还原出来。

       在 Xcode 工具条里,点按 Utilities(实用工具)按钮关闭实用工具区域,然后点按辅助编辑器按钮(Assistant Editor)调出辅助编辑器面板。
    确保辅助编辑器里显示的是视图控制器的头文件。在画布中,按住 Control 并从 Hello 按钮拖动到 HelloWorldViewController.h 的方法声明部分(即 @interface 语句到 @end 语句之间的部分)。

       在非苹果键盘上control键依然是Ctrl键。
       IBAction 是一个特殊的关键词,用来告诉 Xcode 把一个方法当成目标-动作连接来看待。IBAction 被定义为 void

       插座变量(Outlet)描述的是两个对象之间的连接。当你需要让一个对象(例如视图控制器),与它所包含的一个对象(例如文本框)进行沟通时,你就会把被包含的那个对象称为插座变量。当应用运行起来时,你在 Xcode 里创建的插座变量就被还原出来了,这样在运行时这些对象就可以相互交流了。

       给文本框设置委托对象:按住 Control 键并从文本框拖动到场景坞里的黄色球体上(黄色球体代表视图控制器对象),当半透明面板出现时,选择 Outlets(插座变量)部分的delegate


    23.源代码控制管理(SCM)

         能够提供比快照更加细致入微的变更跟踪管理。(如果你在团队中与他人协同工作,源代码控制管理还能帮你提高团队效率。)SCM 系统会在磁盘中对每个文件保存多个版本,并存储各个文件各个版本的元数据到 SCM 仓库中。

         Xcode 支持两种流行的 SCM 系统:Git 和 Subversion。Xcode 包含了一个版本编辑器,无论使用哪种 SCM 系统都可以轻松对比保存在仓库中文件的不同版本。如果你发现代码中出现了漏洞,则可以将最新的版本和之前的某个正常运行的版本拿来比较,让你捉出产生问题的“臭虫”。




    24.分发和发布应用
         Xcode 能够让你轻松地将尚未正式发布到 App Store 的应用分享给测试者们。要分发应用,请在方案编辑器中创建一个应用归档。然后就可以使用 Xcode 的归档管理器来让测试者们分享你的应用。

         当你准备正式发布应用的时候,可以先使用归档管理器来评估一下你的应用能否达到 App Store 审核的标准。这项评估能够通过则可以保障正式审核过程尽可能地快速。然后就可以在 Xcode 正式向 App Store 提交你的应用了。


    学习进度

    http://www.guomii.com/posts/20284


    25.在instruments中查看内存

        

    The Living bytes, or Net bytes is how much memory your application is using at the time you select in the timeline. That will include leaked memory, since leaked memory is never deallocated.

    #Living is how many allocations of a certain size/object type happened (and are still allocated). This is very useful when looking for leaks. For example, if you repetitively perform an action (like coming in an out of a modal view controller), and you see that #Living of an object grows by the same amount each time, then you're probably leaking those objects. You can then confirm by drilling down and seeing the exact line of code that is allocating the objects, and even see the time index each one was created.

    Overall bytes includes memory that has been released. It's useful to track that number for performance optimization purposes, but not if you're just trying to see your current memory footprint or look for leaks.


    笔画输入面板打开后,内存使用增加了20M


    苹果bug--获取键盘有内存泄露问题
    memory leaks in open_handle_to_dylib_path and UIKeyboardInputManagerClassForInputMode
    If you're developing an iPhone app that uses UITextField objects and you're rigorous enough to check for memory leaks using Instruments, chances are you'd discover some leaks in UIKit and CoreGraphics libraries, stemming from some allocations done in dyld::mkstringf, called from dyld::loadPhase5.
    According to some reports found on the web, it seems that this is a bug in the tools from Apple, and it appears only on the simulator, not when testing on the actual device. So you could safely ignore it. In any case you couldn't do anything about it, as the traceback leading to the leak goes through code outside of your control, that is, unless you happen to work for Apple :).


    26.CodeSign error: code signing is required for product type Application in SDK iOS

    在真机测试的时候往往会突然出现这样一个错误,code signing is required for product type 'Application' in SDK 'iOS 8.1’  ,就是说代码签名证书不对劲。
    解决方案:
    1.选择工程->Build Settings -> Code Signing -> Code Signing Identity -> Debug -> Any ios SDK 将选项改为:iPhone Developer
    2.重新下载你的证书,或者修改通配符,或者说修改你的appid 。选择工程 -》Bundle Identifier  修改为最新的appid 。造成这种原因是因为你修改了你的app sdk版本。
    如果还不行,可以试试
    Edit Project Setting 下面的那个菜单:Edit Active Target “Hello World” =》Build =》 Code Signing =》 Any ios 的值设置为iphone Developer


    展开全文
  • 08-linux基础命令(五)

    千次阅读 2020-01-23 12:18:36
    Linux基础命令(五) 管道命令: 命令执行顺序控制 通常情况下,我们在终端只能执行一条命令,然后按下回车执行,那么如何执行多条命令呢? 顺序执行多条命令 : ... command2 || command3 &&...


    上期基础命令内容

    Linux基础命令(五)

    管道命令:

    命令执行顺序控制

    • 通常情况下,我们在终端只能执行一条命令,然后按下回车执行,那么如何执行多条命令呢?

    顺序执行多条命令

    command1;command2;command3;
    

    简单的顺序指令可以通过 ;来实现

    有条件的执行多条命令

        which command1 && command2 || command3
    

    && : 如果前一条命令执行成功则执行下一条命令,如果command1执行成功(返回0),则执行command2

    || :与&&命令相反,执行不成功时执行这个命令.

    $?: 存储上一次命令的返回结果.


    grep:

    grep :分析一行信息,如果其中有我们需要的信息,就将该行拿出来.
    grep [-acinv] [–color=auto] ‘查找字符串’ filename

    常用[参数]:

    -a : 将binary文件以text文件的方式查找数据
    
    -c : 计算找到 '查找字符串'的次数
    
    -i : 忽略大小写的不同
    
    -n : 输出行号
    
    -v : 反向选择,显示没有查找内容的行
    
    --color=auto : 将找到的关键字部分加上颜色显示
    选项
    
    -a 不要忽略二进制数据。
    
    -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
    
    -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。
    
    -c 计算符合范本样式的列数。
    
    -C<显示列数>或-<显示列数>  除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
    
    -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
    
    -e<范本样式> 指定字符串作为查找文件内容的范本样式。
    
    -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
    
    -f<范本文件> 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
    
    -F 将范本样式视为固定字符串的列表。
    
    -G 将范本样式视为普通的表示法来使用。
    
    -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
    
    -H 在显示符合范本样式的那一列之前,标示该列的文件名称。
    
    -i 忽略字符大小写的差别。
    
    -l 列出文件内容符合指定的范本样式的文件名称。
    
    -L 列出文件内容不符合指定的范本样式的文件名称。
    
    -n 在显示符合范本样式的那一列之前,标示出该列的编号。
    
    -q 不显示任何信息。
    
    -R/-r 此参数的效果和指定“-d recurse”参数相同。
    
    -s 不显示错误信息。
    
    -v 反转查找。
    
    -w 只显示全字符合的列。
    
    -x 只显示全列符合的列。
    
    -y 此参数效果跟“-i”相同。
    
    -o 只输出文件中匹配到的部分。
    

    示例

    [root@CentOS7 ~]# cat /etc/passwd |grep -n --color=auto 'root'
    1:root:x:0:0:root:/root:/bin/bash
    10:operator:x:11:0:operator:/root:/sbin/nologin   #被匹配到的root会被标红显示
    

    tr :

    tr 命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

    主要参数

    -c 或——complerment:取代所有不属于第一字符集的字符;
    
    -d 或——delete:删除所有属于第一字符集的字符;
    
    -s 或--squeeze-repeats:把连续重复的字符以单独一个字符表示;
    
    -t 或--truncate-set1:先删除第一字符集较第二字符集多出的字符。
    

    示例

    将输入字符由大写转换为小写

    echo "HELLO WORLD" | tr 'A-Z' 'a-z'
    
    hello world
    

    用tr压缩字符,可以压缩输入中重复的字符

    echo "thissss is      a text linnnnnnne." | tr -s ' sn'
    
    this is a text line.
    

    tr可以使用的字符类

    字符 中文翻译
    [:alnum:] 字母和数字
    [:alpha:] 字母
    [:cntrl:] 控制(非打印)字符
    [:digit:] 数字
    [:graph:] 图形字符
    [:lower:] 小写字母
    [:print:] 可打印字符
    [:punct:] 标点符号
    [:space:] 空白字符
    [:upper:] 大写字母
    [:xdigit:] 十六进制字符

    使用方式

    tr ‘[:lower:]’ '[:upper:]'


    使用tr打印1加至100

    [root@CentOS8 data]# echo {1..100} > filethree.txt
    
    [root@CentOS8 data]# cat filethree.txt 
    
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
    
    [root@CentOS8 data]# tr ' ' '+' < filethree.txt > filefour.txt
    
    [root@CentOS8 data]# cat filefour.txt 
    
    1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
    

    打印1至100的奇偶数集

    [root@CentOS8 data]# echo {0..100..2} (打印1到100的偶数集)
    
    0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
    
    [root@CentOS8 data]# echo {1..100..2}  (打印1到100的奇数集)                 
    
    1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
    

    标准错误导入管道 :

    [root@CentOS8 data]# xxx | tr 'a-z' 'A-Z'   #这样输入是无法将其导入的!              
    
    bash: xxx: command not found...
    Failed to search for file: Cannot update read-only repo
    
    #正确做法:
    
    [root@CentOS8 data]# xxx |& tr 'a-z' 'A-Z'
    
    BASH: XXX: COMMAND NOT FOUND...
    FAILED TO SEARCH FOR FILE: CANNOT UPDATE READ-ONLY REPO
    
    #使用tr将其替换成大写并输出至文件中:
    
    [root@CentOS8 data]# xxx |& tr 'a-z' 'A-Z' > filefive.txt
    
    [root@CentOS8 data]# cat filefive.txt 
    
    BASH: XXX: COMMAND NOT FOUND...
    FAILED TO SEARCH FOR FILE: CANNOT UPDATE READ-ONLY REPO
    

    split:

    split顾名思义,讲一个大文件依据文件大小或行数切割成为小文件.

    [参数] :

    -b : #后面可接欲切割文件的大小,可加单位,例如b,k,m等
    
    -l : #以行数来进行切割
    
    -C:#每一输出档中,单行的最大 byte 数。
    
    -d:#使用数字作为后缀。
    PREFIX : #代表前导符,可作为切割文件的前导文字
    

    示例 :生成一个大小为100KB的测试文件:

    [root@localhost split]# dd if=/dev/zero bs=100k count=1 of=date.file
    
    1+0 records in
    1+0 records out
    102400 bytes (102 kB) copied, 0.00043 seconds, 238 MB/s
    

    使用split命令将上面创建的date.file文件分割成大小为10KB的小文件:

    [root@localhost split]# split -b 10k date.file 
    
    [root@localhost split]# ls
    
    date.file  xaa  xab  xac  xad  xae  xaf  xag  xah  xai  xaj
    

    tail:

    tail 命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。

    如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。

    注意如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1 048576(1M)。

    选项

    --retry: #即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用;
    
    -c<N>或——bytes=<N>#输出文件尾部的N(N为整数)个字节内容;
    
    -f<name/descriptor>或;--follow<nameldescript>#显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效;
    
    -F: #与选项“-follow=name”和“--retry"连用时功能相同;
    
    -n<N>或——line=<N>#输出文件的尾部N(N位数字)行内容。
    
    --pid=<进程号>#与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令;
    
    -q或——quiet或——silent: #当有多个文件参数时,不输出各个文件名;
    
    -s<秒数>或——sleep-interal=<秒数>#与“-f”选项连用,指定监视文件变化时间隔的秒数;
    
    -v或——verbose: #当有多个文件参数时,总是输出各个文件名;
    

    示例

    tail file (显示文件file的最后10行)
    tail +20 file (显示文件file的内容,从第20行至文件末尾)
    tail -c 10 file (显示文件file的最后10个字符)


    I/O重定向:

    将输出和错误重新定向到文件
    在这里插入图片描述
    STDOUT和STDERR可以被重定向到文件

    支持的操作符号包括

    1> 把STDOUT重新定向到文件
    2> 把STDERR重新定向到文件
    &> 把所有输出重新定向到文件

     >  #文件内容将会被覆盖
    
    set -C  #禁止将内容覆盖已有文件,但可以追加
    
    1> | file  #强制覆盖
    
    set +C  #允许覆盖
    
    >>  #在原有内容基础上,追加内容
    >
    
    2>  #覆盖重定向错误输出数据流
    
    2>>  #追加重定向错误输出数据流
    

    标准输出和标准错误输出各自定向至不同位置:

    COMMAND > /path/to/file.out 2> /path/to/error.out
    

    合并标准输出和错误输出为同一个数据流进行重定向

         &>  #覆盖重定向
    
        &>>  #追加重定向
    
    COMMAND > /path/to/file.out 2>&1
    
              (顺序很重要)
    
    COMMAND >> /path/to/file.out 2>&1
    
     #合并多个程序的STDOUT
    
      (cal 2007;cal 2008) > all.txt
    

    命令执行过程视图:

    在这里插入图片描述

    示例:

    [root@Redhat7 data]# ls /home/ > file 
    [root@Redhat7 data]# cat file 
    td
    [root@Redhat7 data]# ls /home/xsifuew 2> file 
    [root@Redhat7 data]# cat file 
    ls: cannot access /home/xsifuew: No such file or directory
    [root@Redhat7 data]# ls /home/xsifuew 1> file 2>&1
    [root@Redhat7 data]# cat file 
    ls: cannot access /home/xsifuew: No such file or directory
    

    单行重定向:

    [root@CentOS8 data]# cat > ./file.txt
           abc
           def
           xyz
    

    多行重定向:

    [root@CentOS8 data]# cat > ./filetwo.txt <<开始符
          > abc
          > def
          > 结束符
    

    开始符与结束符为相同字符
    在这里插入图片描述

    展开全文
  • 那就是 Command ⌘ 键 . 但是你可能根本不知道这个键上面的图标的来历与前世今生. 那到底这个字符代表着什么, 而且又这么重要呢? ⌘ * 老款的Mac上还有苹果图标来标示Command Key 这个符号其实有很多的...
  • Linux下的 command not found错误(解决方法)

    万次阅读 热门讨论 2017-12-22 14:12:20
    Linux下的 command not found错误(解决方法)
  • linker command failed with exit code 1 (use -v to see invocation)这个错误貌似遇见并不止一次,当我想用某个第三方类库的时候(如SBJson),我直接把类库文件copy到工程目录里面,然后一编译就出现这样错误(并不是...
  • Command Buffer是Unity5新增的一个灰常灰常强大的功能。先祭出官方介绍和文档。我们在渲染的时候,给OpenGL或者DX的就是一系列的指令,比如glDrawElement,glClear等等,这些东西目前是引擎去调用的,而Unity也为...
  • 11种行为型模式之:命令模式(Command)

    万次阅读 2017-04-11 16:25:22
    定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销...Command类:是一个抽象类,类中对需要执行的命令进行声明,一般来说要对外公布一个execute
  • python安装第三方库遇到 ERROR: Command errored out with exit status 1:…的问题 先来看看错误提示: 本来想用python弄个词云玩玩,没想到在安装wordcloud库的时候居然给我这一大串红叉叉,很是奔溃,出师不利啊!...
  • Xcode中Command Line Tools安装方法

    万次阅读 2016-06-27 00:50:01
    在从App Store上下载Xcode后,默认是不会安装Command Line Tools的,Command Line Tools是在Xcode中的一款工具,可以在命令行中运行C程序。为了学习Objective-C,现在也来学习一下如何安装Command Line Tools,具体...
  • 0x00 前言 文章中的文字可能存在语法错误以及...1.前几次还好用的命令,这次再输入就出现-bash: ***: command not found的情况; 2.第一次使用就出现 -bash: ** : command not found的情况。 导致这种问题的原...
  • [设计模式]Command命令模式

    千次阅读 2019-12-22 21:14:13
    command命令模式 Command模式通过将请求封装到一个对象(Command)中,并将请求的接收者存放到具体的ConcreteCommand类中的(reciver)中,从而实现调用操作的对象和操作的具体实现之间的解耦。 解析:Command模式...
  • -bash: wget: command not found的两种解决方法 今天给服务器安装新LNMP环境时,wget 时提示 -bash:wget command not found,很明显没有安装wget软件包。一般linux最小化安装时,wget不会默认被安装。 可以...
  • Python报错ERROR: Command errored out with exit status 1:

    万次阅读 多人点赞 2020-08-24 10:48:01
    因为Pycharm最近老是弹出RELP COMMUNICATIONS,非常影响代码运行的效率。 REPL(Read-Eval-Print Loop),翻译过来就是“读取-求值-输出”循环,是一个简单的...ERROR: Command errored out with exit status 1: ...
  • Linux命令行报bash:.....:command not found的解决办法

    万次阅读 热门讨论 2008-07-30 14:21:00
    Linux命令行输入命令执行后报“bash:....:command not found”这是由于系统PATH设置问题,PATH没有设置对,系统就无法找到精确命令了。 1、在命令行中输入:export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/...
  • Command line is too long问题解决

    万次阅读 多人点赞 2018-07-09 20:38:59
    Idea启动项目报错:Command line is too long. Shorten command line for className or also for JUnit defaultconfiguration.如下图所示:解决方法:在该项目文件夹.idea/workspace.xml中找到&lt;component name...
  • Centos出现-bash: unzip: command not found的解决办法

    万次阅读 多人点赞 2016-05-17 14:11:19
    unzip: command not found的错误。   unzip——命令没有找到,其原因肯定是没有安装unzip。   利用一句命令就可以解决了。   命令是:   yum install -y unzip zip   安装成功后就可以使用unzip命令...
  • Intellij IDEA运行报Command line is too long解法

    万次阅读 多人点赞 2018-06-07 16:22:42
    报错内容:Error running 'ServiceStarter': Command line is too long. Shorten command line for ServiceStarter or also for Application default configuration.解法:修改项目下 .idea\workspace.xml,找到标签 ...
  • 解决vim E492: Not an editor command: ^M

    万次阅读 2016-01-19 12:28:31
    问题描述今天修改了一下实验室服务器的vim配置...但在启动vim时却报了Not an editor command: ^M的错误。vim E492: Not an editor command: ^M问题解析而*nix的文件换行符为\n,但windows却非要把\r\n作为换行符,所以
1 2 3 4 5 ... 20
收藏数 1,191,218
精华内容 476,487
关键字:

command