<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一點一滴,編程人生

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      69 隨筆 :: 0 文章 :: 25 評論 :: 0 Trackbacks

    2012年4月26日 #

    今天為了這個問題了忙乎了一整天,特此記錄下,希望對有遇到同樣問題的同學(xué)有幫助。事情的經(jīng)過是這樣的,原先使用atomikos一直把數(shù)據(jù)源用jndi配置到tomcat的context.xml下,一直這么用沒有出現(xiàn)問題,配置如下
        <Resource name="jdbc/cms" auth="Container"
            type
    ="com.atomikos.jdbc.AtomikosDataSourceBean" factory="com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory"
            uniqueResourceName
    ="jdbc/cms" xaDataSourceClassName="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"
            xaProperties.URL
    ="xxxx"
            xaProperties.user
    ="xxxx" xaProperties.password="xxxx"
            xaProperties.pinGlobalTxToPhysicalConnection
    ="true" maxLifetime="60" poolSize="4" />

    最近項目要遷移到maven下,所以把context.xml的數(shù)據(jù)源配置挪到了spring.xml下,配置如下
        <bean id="myDataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean" init-method="init" destroy-method="close">
           
    <property name="uniqueResourceName" value="masterDB" />
           
    <property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource"/>  <!-- SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]  -->  
           
    <property name="poolSize" value="0" /> 
           
    <property name="minPoolSize" value="0"/>    
           
    <property name="maxPoolSize" value="9"/>    
           
    <property name="borrowConnectionTimeout" value="60"/>    
           
    <property name="reapTimeout" value="20"/>    
           
    <property name="maxIdleTime" value="60"/>    
           
    <property name="maintenanceInterval" value="60"/>    
           
    <property name="loginTimeout" value="60"/>
           
    <property name="xaProperties">  
                
    <props>
                    
    <prop key="url">xxxx</prop>  
                    
    <prop key="user">xxxx</prop>
                    
    <prop key="password">xxxx</prop>
                
    </props>
            
    </property>  
        
    </bean>
    因為上面這個配置我是照搬網(wǎng)上的,所以覺得沒有問題,可是項目啟動后,用此數(shù)據(jù)源提交事務(wù)時確報以下錯誤:

    Raised -5: invalid arguments were given for the XA operation 或 XAER_INVAL: Invalid arguments (or unsupported command)

    一開始我以為maven配置的mysql-connector-java驅(qū)動版本不對,或是atomikos版本不對,可是不管如何換版本都不行,就快要瘋了的時候,我看到了原先jndi方式中有這么一行代碼
    xaProperties.pinGlobalTxToPhysicalConnection="true"
    就因為缺少上面這句話導(dǎo)致了問題,上網(wǎng)查資料,據(jù)說是mysql xa bug,有興趣的可以看如下連接,最后配置如下:
           <property name="xaProperties">  
                
    <props>
                    
    <prop key="pinGlobalTxToPhysicalConnection">true</prop>  <!-- mysql必須配置此參數(shù),要不然無法提交事務(wù) -->
                    
    <prop key="url">xxxx</prop>  
                    
    <prop key="user">xxx</prop>
                    
    <prop key="password">xxxx</prop>
                
    </props>
            
    </property> 



    posted @ 2017-06-28 19:32 writegull 閱讀(2487) | 評論 (0)編輯 收藏

    事情描述:
    本人在阿里云上創(chuàng)建了一個linux服務(wù)器,跑了一個自己的測試web項目。搭建了redis。想方便測試用,就沒有對redis進(jìn)行任何安全防護(hù)并暴露在了公網(wǎng)上。期間阿里云發(fā)現(xiàn)了此問題,還發(fā)短信提醒我,由于最近在公司一直加班也沒有時間理會,沒想到就在今天真的被黑了,事后心想多虧是個測試服務(wù)器,如果是正式環(huán)境,也真危險,這個黑客也沒有停下腳步,通過redis強(qiáng)大的能力在/root/.ssh目錄下面上傳了公鑰,徹底攻破了服務(wù)器,免密碼登錄服務(wù)器,一般黑客到這步也就看看有沒有興趣的數(shù)據(jù),這個黑客一看這就是個沒有價值的測試服務(wù)器,所以心一橫,在我這上面裝了個DDOS攻擊軟件,把我的機(jī)器當(dāng)起肉雞。

    1.這就是黑完后留下的公鑰/私鑰,刪除authorized_keys,id_rsa, id_rsa.pub這三個文件吧,除非還想讓他繼續(xù)黑下去。。。。


    2.通過redis的key *命令可以看到有個叫crackit的key。這就是黑客在入侵后留下來的,原先set的值是公鑰,入侵成功之后就改成這個了,把這個key也刪除掉吧。


    3.修改redis默認(rèn)端口吧,不讓黑客利用6379端口。在redis安裝目錄中,修改redis.config文件。修改完了別忘了重啟redis服務(wù),

    # redis-server /etc/redis/redis.conf 開啟

    # redis-cli shutdown 關(guān)閉



    4.重啟后查看redis是否運行
    ps -x | grep redis
    5.通過指定端口訪問redis。
    redis-cli -p 6666

    6.給redis設(shè)置密碼或者干脆設(shè)置成只能內(nèi)網(wǎng)訪問

    7.通過top命令發(fā)現(xiàn)了幾個可疑的程序



    8.minerd這個程序是個用來挖掘萊特幣的,這個黑客看來干了不少壞事啊。。我們用命令 ps -ef|grep minerd 查找一下這個進(jìn)程,殺掉這個進(jìn)程kill -9 18267,并且去/tmp目錄刪除minerd目錄


    9.黑客在tmp目錄留下了一個叫1.sh的腳本,是用來下載挖掘萊特幣程序的。也把它kill掉吧。以下是腳本內(nèi)容。


    10.通過cat /etc/passwd命令可以看到有一個叫作syss的非法用戶,權(quán)限還很高,跟root一樣,刪掉他吧,這是黑客入侵后方便進(jìn)入的。使用命令userdel -f syss 強(qiáng)制刪除一個用戶,哪怕他正在登錄。


    11.去/mnt目錄上,可以看到黑客掛載了很多程序,刪除他們吧。


    12.通過nethogs軟件可以按進(jìn)程實時統(tǒng)計網(wǎng)絡(luò)帶寬利用率,這個用來看是否存在DDOS攻擊最好不過了。

    13.暫時解決對外DDOS攻擊,最快的辦法就是用防火墻,這個阿里云提供的腳本幫了大忙。直接上傳到服務(wù)器上,運行一下世界就清靜了。下載地址:
    https://help.aliyun.com/knowledge_detail/5973920.html?spm=5176.7618386.5.1.H8H33f

     
    posted @ 2015-12-15 01:13 writegull 閱讀(4123) | 評論 (4)編輯 收藏

    今天在修改server.xml調(diào)試程序時,遇到下面這個問題,clean,重啟都不好使。

                    Removing obsolete files from server..
                   Could not clean server of obsolete files: null
                    java.lang.NullPointerException
    解決方法是把.metadata\.plugins\org.eclipse.wst.server.core這個目錄下面的tmp0刪除掉,再clean下就可以了??赡苁蔷彺鎲栴}。
    posted @ 2015-01-03 16:58 writegull 閱讀(7283) | 評論 (0)編輯 收藏

    有時候需要手動地去禁用一個uibutton,使用button.enabled = NO的時候雖然能夠達(dá)到目的但也會帶來副作用,那就是按鈕變的半透明了。有時候應(yīng)用不需要這種副作用,可以嘗試使用button.userInteractionEnabled = NO來達(dá)到這個目的,在禁用按鈕的同時也不會使得按鈕變得半透明。
    posted @ 2013-12-23 10:29 writegull 閱讀(601) | 評論 (0)編輯 收藏

    裝win8后發(fā)現(xiàn)cpu占用率50%-60%,而且磁盤瘋狂讀寫,是com surrogate這個程序,還有幾個服務(wù)造成的,之后我把com surrogate結(jié)束進(jìn)程了cpu使用率直接降低到10%以下,我就郁悶了。
    解決方案:
    1,在“更多電腦設(shè)置”那里的“用戶”改為“本地用戶”。
    2,“離開”家庭組(一般都是它的原因)
    3,“同步設(shè)置”關(guān)
    4,一般“共享”什么的不到需要都是“關(guān)”的狀態(tài)。
    5,做完以上幾點都不行,就真幫不了你了。
    posted @ 2013-03-18 22:47 writegull 閱讀(399) | 評論 (0)編輯 收藏

    這個問題似乎只有在手動改變系統(tǒng)狀態(tài)欄級別的情況才會出現(xiàn)

    例如:self.window.windowLevel = UIWindowLevelStatusBar+1;

    這樣設(shè)置的話相當(dāng)于影響了彈出短信或郵件控制器頁面window的級別,所以造成不顯示鍵盤問題(不過此問題在ios6以下沒有)

    解決方法:在當(dāng)前視圖控制器中加入下面的代碼,即可解決

    - (void) viewDidAppear:(BOOL)animated {

        [super viewDidAppear:animated];

        self.window.windowLevel = UIWindowLevelNormal;

    }

    posted @ 2012-10-30 21:08 writegull 閱讀(1576) | 評論 (1)編輯 收藏

    原文地址:http://blog.csdn.net/pjk1129/article/details/7255163

    最近在做Apple的IOS開發(fā),有開發(fā)靜態(tài)庫的需求,本身IOS的開發(fā),只允許靜態(tài)庫或者Framework。在Xcode上沒有找到允許編譯,如同Android上的*.so和Win32上的dll這樣的說法。不過Framework這樣的框架,估計也是類似動態(tài)庫的實現(xiàn),不過沒有具體研究過,后續(xù)繼續(xù)深入研究。

    我這個文檔的靜態(tài)庫的開發(fā)是基于Xcode4.2和iOS SDK5.0編寫的。Xcode4跟之前的Xcode3還是有不少的差別的。

    下面就簡單寫一個靜態(tài)庫和一個調(diào)用靜態(tài)庫的例子。

    靜態(tài)庫的編寫:

    1.靜態(tài)庫工程的建立:

    Xcode New一個新的project,選擇IOS下面的Framework&Library,下面有一個Cocoa Touch Static Library。直接next去建立一個Print這樣的工程。


    2.工程建立

    我們添加很簡單的"- (void)printA;"和"+ (void)printB;"的方法,這個方法的實現(xiàn)也是很簡單的,在*.m文件中的實現(xiàn)就是一個"NSLog(@“”);"這樣我們編譯出來的libstaticlib就可以被其他的IOS工程進(jìn)行調(diào)用了。這塊注意一下,目前我們的Print->iOS Device



    3.編譯前準(zhǔn)備

    這里分release與debug版本,需要設(shè)置一下


    4.OK,編譯

    我們可以在Products下面找到我們編譯生成的libstaticlib.a這個文件。

    注意未編譯前為紅色:左                             編譯后為黑色: 右

           

    5.ok

    在右邊 這個文件上右鍵Open In Finder。這時候我們打開了一個文件夾,里面有一個libPrint.a。后面我們繼續(xù)編寫一個調(diào)用這個libPrint.a的App。但是這個App在編譯時候會出錯,通過這個錯誤的解決,說明Xcode的一些編譯相關(guān)的東西。這里,我們在command下面根據(jù)路徑找到這個文件,用這個非常重要的命令查看一下這個lib的信息!

    打開終端寫入如下命令:這是什么?這就是所在的路徑 

    以下均是在自己的mac上的路徑。你需要將/Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/ 替換成你的路徑。

    cd /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/  

    我們手動打開這個路徑:可以看到如下信息:Release-iphoneos


    這個是給真機(jī)用的,那我們要給模擬器和真機(jī)封裝的靜態(tài)庫應(yīng)該都能用才好。這個下面介紹?。。。。? 


    然后再在終端 打開這個文件:cd /Users/user/Library/Developer/Xcode/DerivedData/UItab-dbvoszbzpavyglaboxgflvrnzfce/Build/Products/Debug-iphoneos

    命令是:lipo -info libPrint.a,可以看到顯示的結(jié)果是:Arch是  Arm7。下面我會具體介紹一下。


    6.建立一個調(diào)用這個libPrint.a的應(yīng)用

    應(yīng)用就很簡單了,我們添加剛才libPrint.a的*.h文件。 然后在這個工程的Build Phases的Link Binary With Library里面添加我們剛才拷貝出來的那個libPrint.a。



    7.插入了h和a文件后

    我們就可以在control里面調(diào)用這個libPrint.a 函數(shù)了。

    #import "AstroDiskAppDelegate.h"

    #import "Print.h"


    @implementation AstroDiskAppDelegate


    @synthesize window = _window;


    - (void)dealloc

    {

        [_window release];

        [_viewController release];

        [super dealloc];

    }


    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    {

        

        //調(diào)用libPrint.a

        [Print printB];

        Print  *print = [[[Print alloc] init] autorelease];

        [print printA];


        self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

        [self.window makeKeyAndVisible];

        return YES;

    }


    8.OK,編譯運行這個應(yīng)用程序。

    編譯出現(xiàn)錯誤了。這個就是這篇文檔的關(guān)鍵了。主要就是為了介紹編譯靜態(tài)庫相關(guān)的東西。



    9.可以看到undefine symbols for architecture i386這樣的錯誤。

    其實這個錯誤原因很簡單,就是因為,我們用錯了編譯出來的libUITab.a lib,在模擬器里面,我們需要的是基于i386構(gòu)架編譯的static lib,但是這個a文件,大家還記得前面說的arm6 arm7構(gòu)架的么。這個a其實是在iphone這個arm構(gòu)架上運行的代碼。其實show in finder指向的是一個ios device的庫,并不是i386模擬器下的庫。那如何編譯i386的庫呢?看見第二張圖片的Print>IOS Device了么?我們將這個iOS Device修改成iPhone5.0 Simulator。在進(jìn)行編譯,這樣就可以編譯出i386下面的庫。這個時候我們show in finder打開的文件夾還是ios device下的庫。我們最好自己去那個目錄下看一下。這里我們用command去查看了一下目錄情況,如下:可以看到一個iphoneos的目錄和一個simulator的目錄。


    然后我們再看看這個目錄與第4條所示的目錄有什么不同! 同樣也有一個libPrint.a文件。



    10.錯誤原因分析

    Release-iphoneos里面的是基于arm6 arm7編譯出來的庫文件。Release-iphonesimulator文件夾下面的是基于i386編譯出來的文件。

    11.合并.a文件,制作通用靜態(tài)庫

    這二個庫一個是用于真機(jī)運行的一個是用于模擬器運行的.其實我們可以利用lipo將這二個文件打包成一個通用的a文件。命令如下:

    /Users/user/Library/Developer/Xcode/DerivedData/UITab-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products替換成你的路徑。 

    /Users/user/Desktop/libPrint.a替換成合并后的路徑。 

    lipo -create /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/libPrint.a  /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/libPrint.a  -output /Users/pjk1129/Desktop/libPrint.a


    12.打包以后的庫文件,我們查看信息

    然后打入如下命令:lipo -info /Users/pjk1129/Desktop/libPrint.a 

    可以看到如下信息:


    如上,你已經(jīng)看到了,它具備了i386和arm7的條件。 現(xiàn)在我們這個靜態(tài)庫,支持的構(gòu)架已經(jīng)是armv7 i386了。


    13.ok,經(jīng)過上述步驟后

    這個通用庫生成后,我們將原來,調(diào)用這個庫進(jìn)行替換一下,在進(jìn)行編譯,成功編譯,運行結(jié)果如下所示:


    posted @ 2012-10-09 18:14 writegull 閱讀(648) | 評論 (0)編輯 收藏

    three20 wiki 地址:https://github.com/facebook/three20/wiki/Debugging

    You can use Three20's debugging facilities instead of NSLog() / assert(). This would give you an ability to turn off debugging messages without commenting out all NSLog's, sort log messages by importance (errorwarninginfo).

    Turn on debugging(打開調(diào)試)

    These instructions are for Xcode 3:

    • Right-click on project, choose "Get Info".
    • In the "Build" tab, choose "Configuration => Debug" (you probably want to enable this only for debug builds)
    • While in the "Build" tab, search for "Preprocessor Macros" under the "GCC 4.2 - Preprocessing" section.
      • Add a declaration that reads DEBUG. That way you enable debugging in general.
      • Add a declaration that reads TTMAXLOGLEVEL=TTLOGLEVEL_INFO. By doing this, you set the default debugging output to beTTLOGLEVEL_INFO, the most descriptive one.

    Debugging preprocessor macro

    Use debugging

    Logging

    Use these instead of NSLog(). Which level gets printed to the console and which doesn't depends on what's set in preprocessor macros asTTMAXLOGLEVEL (see above).

    TTDERROR(text, ...)    // Log level 1 TTDWARNING(text, ...)  // Log level 3 TTDINFO(text, ...)     // Log level 5 TTDPRINT(text, ...) 

    Example

    If I got this in AppDelegate.m of my project HelloWorld:

    - (void)applicationDidFinishLaunching:(UIApplication *)application {	     TTDINFO(@"Hello!"); } 

    ...the console output would look like this:

    2010-05-15 01:04:20.107 HelloWorld[65222:207] -[AppDelegate applicationDidFinishLaunching:](22): Hello! 

    Conditional logging

    This is a type of logging facility which only outputs something if a particular condition is met:

    TTDCONDITIONLOG(condition, text, ...); 

    Example

    TTDCONDITIONLOG(TTDFLAG_URLREQUEST, @"Request parameters: %@", request.parameters); 

    Debug-only assertions

    Three20 also provides support for assertions which only work in the debug build.

    TTDASSERT(condition_which_would_lead_to_application_termination_when_true); 

    Example

    // Not that implementing safeAddSubview: is a good idea - (void)safeAddSubview:(UIView*)view {     TTDASSERT(nil != view);     if (nil == view) {         return;     }     [self addSubview:view]; } 

    See also

    Links

    posted @ 2012-09-27 10:30 writegull 閱讀(403) | 評論 (0)編輯 收藏

    翻譯:http://www.joshsunshine.me.uk/2012/02/29/ios-development-remove-old-notifications-from-notification-center.html

    不逐字翻譯了,只是大體說一下。
    看作者的意思,應(yīng)該是他經(jīng)常收到N多通知,而通過其中一條通知打開一個app以后,發(fā)現(xiàn)那個app的其它通知還在通知中心。作者不喜歡這樣的情況。我以為我也存在的這樣的情況,馬上檢查了一下,發(fā)現(xiàn)沒有。看來是少數(shù)app的問題。但是也記錄一下。作者總結(jié)的從通知中心移除通知的三種方法:
    1.將app的BadgeNumber設(shè)為0,就是app圖標(biāo)右上角那個

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];


    2.如果BadgeNumber本身就是0的情況,可以先將其設(shè)1再設(shè)置成0

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

    3.如果以上的辦法都不好使的話,那就用本地通知欺騙一下。

    UIApplication* application = [UIApplication sharedApplication];
    NSArray* scheduledNotifications = [NSArray arrayWithArray:application.scheduledLocalNotifications];
    application.scheduledLocalNotifications = scheduledNotifications;

    就這么多了,我仔細(xì)想了一下,為什么我的應(yīng)用從其中一條通知打開的時候,其它的通知消失掉:
    因為我在程序啟動的時候就執(zhí)行了第一條:)

    posted @ 2012-09-14 17:51 writegull 閱讀(2755) | 評論 (0)編輯 收藏

    使用MFMessageComposeViewController 編寫發(fā)短信模塊時界面是英文的情況下,用下面的方法可以解決問題

    在plist里面Localization native development region 選擇 china ,然后Localized resources can be mixed 選 YES,如果沒有Localized resources can be mixed,需手動添加
    posted @ 2012-09-10 18:12 writegull 閱讀(704) | 評論 (0)編輯 收藏

    1.圖標(biāo)的圓角效果是系統(tǒng)自動加上的。

    2.光暈效果雖然也是系統(tǒng)加上的,但可以通過程序中設(shè)置參數(shù)來去掉內(nèi)建光暈效果。

    方法:在info.plist里面添加一條記錄UIPrerenderedIcon,新版的XCODE 會自動識別為Icon already includes gloss effects 打上勾就OK了。如果沒有識別的右邊欄寫上YES就可以

    posted @ 2012-07-31 14:06 writegull 閱讀(627) | 評論 (0)編輯 收藏

         摘要:   閱讀全文
    posted @ 2012-07-25 11:14 writegull 閱讀(1970) | 評論 (1)編輯 收藏

    原文地址:http://blog.itotem.com.cn/?p=22

    - alloc, copy, retain會把引用計數(shù)+1

    - release會把引用計數(shù)-1

    - 局部變量如果初始化時不是autorelease的,要及時調(diào)用release釋放,并且賦值為nil否則引用仍然存在導(dǎo)致下次無法用nil做是否有值的判斷

    - 實例變量要在每次賦值時要先釋放當(dāng)前引用的對象再賦值,并retain一下保證引用計數(shù)為1

    - 對于有retain參數(shù)的property,直接使用”.”賦值時系統(tǒng)會自動釋放當(dāng)前引用對象再賦值,并自動retain一下

    - dealloc中要對所有實例變量調(diào)用release,對于有retain參數(shù)的property只需要調(diào)用self.theProperty = nil即可,系統(tǒng)會去做釋放

    - delegate的property通常設(shè)為assign,如果設(shè)為retain的話會有循環(huán)引用的問題,比如aView.delegate = self時會把self retain一下,在aView的dealloc中會把delegate release,但是由于self的引用永遠(yuǎn)不會小于1,所以導(dǎo)致aView和self的dealloc永遠(yuǎn)都不會被執(zhí)行,都永遠(yuǎn)駐留內(nèi)存造成泄露。所以如果要設(shè)為retain的話一定要確保不會造成循環(huán)引用問題。

    - 在UIViewController中的viewDidUnload中要釋放掉局部變量,調(diào)用release并設(shè)為nil,有時系統(tǒng)收到內(nèi)存警告時會自動調(diào)用這個函數(shù)來釋放一些內(nèi)存空間

    - 系統(tǒng)內(nèi)存警告的回調(diào)中要釋放掉內(nèi)存中的緩存和其他可釋放的東西,以免造成crash

    - 使用UITableView時要把cell設(shè)置為重用的,并且要確保確實寫得是重用的,有的人寫完的結(jié)果相當(dāng)于還是每次都重建cell,導(dǎo)致效率低下

    - 使用UIScrollView時要自己控制釋放掉目前不顯示的內(nèi)容,尤其是圖片,考慮圖片大小和瀏覽效果可以加載當(dāng)前顯示頁兩邊的3-5頁內(nèi)容

    - 圖片需要做緩存,尤其是本地文件系統(tǒng)緩存,可以放到Library/Cache目錄中,這個目錄系統(tǒng)有專用的常量來獲取,比如:

    這里是一個小例子闡釋前幾條基本原則:

    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
    - (void)aFunction{
    //創(chuàng)建一個局部變量view
    UIView *view = [[UIView alloc] init];
    // 賦值給實例變量theView
    [theView release]; //先釋放一下當(dāng)前引用的變量
    theView = [view retain]; //給實例變量賦值時需要retain一下
    // 如果theView是一個有retain屬性的property
    self.theView = view; //不需要先釋放,也不需要調(diào)用retain,系統(tǒng)會自動做,所以一定不能這樣寫self.view = [[UIView alloc] init];,這樣的話創(chuàng)建的view會被retain兩次,造成泄露,對于這種可以先創(chuàng)建一個局部變量,給self.view賦值后再釋放
    [view release]; //要及時釋放局部變量
    }
    - (void)dealloc{
    //釋放局部變量
    [theView release];
    //如果theView是一個有retain屬性的property,也可以這樣寫
    self.theView = nil;
    [super dealloc];
    }
    posted @ 2012-07-05 17:05 writegull 閱讀(1236) | 評論 (1)編輯 收藏

    今天測試程序時發(fā)現(xiàn)一個奇怪的現(xiàn)象,我在關(guān)于頁面中想顯示圖片icon文件,可是怎么調(diào)試都不顯示。后來加載其它圖片則顯示正常。

    我分析原因是蘋果對程序訪問icon文件做了限制,所以不能正常顯示

    解決方案:把icon文件復(fù)制一份,改成其它名字,加載改名字的文件,問題成功解決!
    posted @ 2012-06-26 16:10 writegull 閱讀(354) | 評論 (0)編輯 收藏

    今天開發(fā)中使用字符串分割函數(shù)split(),發(fā)現(xiàn):
            String s = "upload/20120416135915265.sql";
            System.out.println(s.split("."));
    輸出的并不是想要的結(jié)果,之后輸出:
            System.out.println(s.split(".").length);
    結(jié)果竟然是0!??!
    突然想到轉(zhuǎn)義字符,于是:  
            System.out.println(s.split("\\."));
    OK啦?。?!
    原來在java中函數(shù)split(".")必須是是split("\\.")。
    posted @ 2012-06-24 09:27 writegull 閱讀(31369) | 評論 (4)編輯 收藏

    感謝蚊帳的投遞
    新聞來源:伯樂在線
    很多人表面上看著老實巴交的,實際上內(nèi)心比誰都好強(qiáng)、自負(fù)、虛榮、甚至陰險。工作中見的多了,也就習(xí)慣了。有一些人,什么事都寫在臉上,表面上經(jīng)常得罪人,甚至讓人討厭。但是他們所表現(xiàn)的又未必不是真性情。

    我相信大多數(shù)人都看過《豪門夜宴》這部香港老電影。張學(xué)友、梁朝偉演的拍馬屁的場景太有意思了,其中有這樣一段:當(dāng)兩馬屁精幫老板說出主意,老板馬上叫 停,然后拍一下腦門:“哦。。。我想到了。。。”,把別人的idea當(dāng)成自己的說出來。我在工作中還真不止一次遇到這種事,我提出來的想法老被別人拿來當(dāng) 作自己的原創(chuàng),當(dāng)然個別小偷洋洋得意的描述自己的‘原創(chuàng)’時還會偷偷的瞄我一下,看我有沒有不高興,,,我并沒有不高興,大概是因為想到那個電影段子被逗 樂了。天下學(xué)術(shù)都一大抄,更何況什么想法,什么創(chuàng)新,通通都是浮云!

    君不見創(chuàng)新項目一大堆,都被抄死化成灰
    ! 但是不能因此而放棄創(chuàng)新,大地不可以因為有畜牲吃草而不復(fù)生機(jī),山泉也不會因為有王八偷水而不冒活水。第一點:保持有一顆生機(jī)靈動的心。因為這個東西是別 人偷不走的,也是最大的財富。如果你不俱備這個東西,那么請用一顆善心去培養(yǎng)它。人人都是耀眼的珍珠,只是被灰塵蒙蔽了眼。

    記得剛進(jìn)公司那會踏踏實實工作,滿懷激情。不過第一周就把自己的頂頭上司給得罪了,我并沒有做錯什么,記得當(dāng)時還有同事幫我說話,后來慢慢發(fā)現(xiàn)他是一個相 當(dāng)自負(fù)的人。不過話說回來搞技術(shù)的在技術(shù)方面有幾個不自負(fù)。這次事之后我并沒有學(xué)乖。對于別人設(shè)計不合理的地方,我會指出來,并提出該如何做。對于語言基 礎(chǔ)薄弱,設(shè)計模式薄弱的同事,我會好心推薦一些書籍,,,,,,本是好心幫助別人,卻并沒有得到別人的感激。相反,大部分會覺得你看不起他們,更有甚者不但不會反思改進(jìn)自己的弱點,反而打擊報復(fù)看不起他的人。所以千萬請記住第二點:不可以隨便提意見。特別是新人,請務(wù)必保持低調(diào)。這一點在日常生活中同樣實用。

    與第二點相對,第三點:經(jīng)常肯定、稱贊同事的成果和進(jìn)步。注意這里并不是要你去巴結(jié)討好。常??吹絼e人的優(yōu)點并加以肯定也是比較正面和必要的行為。這樣不但可以增進(jìn)關(guān)系,更重要的是可以鼓勵別人。

    我一直認(rèn)為一個人沒有自知之明就等同于垃圾。要隨時隨地知道自己小名叫什么。話說我有一位同事,基礎(chǔ)相當(dāng)薄弱,但又太愛去表現(xiàn)自己,經(jīng)常到處指指點點,生怕別人不知道自己是“高手”。由于老開“黃腔”常被人背后偷笑而不自知。

    第四點:低調(diào)一些,謙虛一些,不斷提高自己的實力。進(jìn)公司時所在部門是剛成立的,工作一段時間后,我發(fā)現(xiàn)由于部門團(tuán)隊開發(fā)的特殊性很有必要在公司通用編碼規(guī)范基礎(chǔ)上再制定內(nèi)部的編碼和設(shè)計規(guī)范,于是向上司 提了我的想法,他同意了。于是我起草了一個內(nèi)部規(guī)范手冊。但是執(zhí)行過程中,有人按手冊來,有人不按手冊來。產(chǎn)生這種局面的根本原因是上司并沒有支持。

    在這 里沒有必要分析原因,直接給出要記住的第五點:不在其位,不言其事。做好本職工作就好。無論在什么地方,開明而大度的好上司并不多,所以這一點相當(dāng)重要。

    經(jīng)常在開會討論設(shè)計方案的時候,會發(fā)現(xiàn)一個非常有意思的事情。會議本來進(jìn)行的正常而和諧,當(dāng)輪到某個優(yōu)秀的人上去講的時候,氣氛一下子不和諧了。大家都迫 不及待的想挑出他的毛病,就算沒理解別人的意思也會亂說一氣。秀才遇到兵了,,,,,,以前實習(xí)的公司中也時常見到這種情況。每當(dāng)此時我都會在下面感嘆: 好一幅百鳥鳳圖。請記住第六點:木秀于林風(fēng)必摧之,要懂得韜光養(yǎng)晦,不要時時鋒芒畢露

    公司里有個老員工,實力比較強(qiáng),算是一個獨擋一面的人。不過在一次部門改組中并沒有得到提升,被提升為經(jīng)理的反而是一個能力不算太強(qiáng),還比他晚來的人。在此之前我聽到過那個老員工在和其它公司接觸并準(zhǔn)備跳槽的傳聞。第七點:不到最后一刻,自己離職的想法不可以和公司內(nèi)部任何人分享。因 為站在公司的角度來看你已經(jīng)不忠誠了,不愿意重用你了。但是在員工自己的立場來看,公司給的待遇與能力不成正比、不認(rèn)同公司的文化、想換個環(huán)境、想要一個 更好的發(fā)展機(jī)會,這些都是合情合理的。我個人發(fā)現(xiàn)一個規(guī)律:在一般的公司里,凡是堅持到最后經(jīng)受住了“考驗”的“忠誠”者,往往都是沒什么能力的庸才。如 果你是一個公司高層管理者,那么你會如何對待類似的“叛徒”呢?

    第八點:不得罪辦公室里的女人。此處女人定義如下:(1)國寶級的女程序員; (2)女測試,這個不稀罕 ;(3)女助理,到處都是;(4)女上司,這個最要命!   男的處在一起,有什么沖突矛盾吵吵過了就忘了。但女的不一樣,一不小心就得罪了,后邊一逮到機(jī)會就會擺你一道,還沒完沒了!最要命的是:背地里狠狠的陰 你,而當(dāng)著面表現(xiàn)得像你溫馨的親人。

    我們研發(fā)中心有個領(lǐng)導(dǎo)很可愛,不太清楚上面給他灌了什么迷魂湯,以至于自己職位被降了,職權(quán)被銷了很大一部分,還整天手舞足蹈高興得很。事后一兩個月才反 應(yīng)過來不對勁,然后整天愁眉苦臉、、、、、、以這種交際反應(yīng)的速度,被撤是必然的事情,確實不適合搞管理。技術(shù)男大多腦袋是‘方’的,不太善與處理人際關(guān) 系。第九點:加強(qiáng)交際能力。程序員大多還算是聰明的,平常稍稍注意一下就沒什么大問題。不過不要自我感覺良好,我們公司有個工作了十多年的IT男,幾年前就開始被派除去和客戶溝通,丫的,至今那一口吞吞吐吐的蹩腳的普通話讓人聽了就傷心。

    第十點:若無特殊情況,一定不要跨級匯報。這一點 細(xì)節(jié)很重要。某種意義上你的頂頭上司就是你的老板,直接決定了你的發(fā)展,你就是他手下的兵。并不是誰官大就聽誰的,要不然歷史上那么多兵變都不可能成功, 因為大家都只聽皇帝的,呵呵。從另一個方面講,你‘忠于’你上司的上司,他也不敢用你,因為誰知道提拔你之后,你會不會再越一次級???!

    第十一點:要善于向上司匯報工作。國家干部是不是 人民的公仆本人不太清楚。但公司里那些大大小小的管理者一定是(如果不是這樣那他就不是一個好上司)!那群夾板男,看著是個官,其實過得很苦。既要應(yīng)付好 上面的領(lǐng)導(dǎo),又要充分調(diào)動下面群眾做出業(yè)績,整天搞得焦頭爛額。上面的唱白臉,那么夾板男就唱黑臉??傊Σ蝗菀?。他們的猜疑心很重!時常會懷疑下面的人 沒盡心工作。雖然一般公司都有什么任務(wù)分配管理系統(tǒng),但是那東西遠(yuǎn)遠(yuǎn)不夠。你需要找準(zhǔn)時機(jī)讓他清楚你工作進(jìn)展,你所做出的努力。

    第十二點:不要輕易造成情緒污染。不要因為你一個人不高興,而讓別人都看你的臉色。要學(xué)會雪藏自己的情緒。你若是一個領(lǐng)導(dǎo),那這一點就太要緊了。

    第十三點:一舉一動找準(zhǔn)自己的位置、別人的位置。比如:吃飯時的座次,照相時的排列位置,群發(fā)郵件時收件人的排名順序,文檔作者的位置順序、、、、、、這些都很重要?!兑捉?jīng)》中有講:明相位,立德業(yè)。要是你連自己在哪兒都不知道,你又如何到得了目的地。

    第十四點:沒有必要做一個憤青。剛畢業(yè)那會,我很憤青,看不慣這看不慣那。但是又能怎么樣呢?弱肉強(qiáng)食的本質(zhì)從來沒有改變過,你要學(xué)會嘗試去理解這個社會,理解種種關(guān)系。到某個時候你會發(fā)現(xiàn):一切理所當(dāng)然。你若真的不滿意某個現(xiàn)狀,那么就去盡自己的能力去改變它。勢者,不均也!均則無勢。

    第十五點:記住別人的善,忘記別人的惡。一個人心 里不應(yīng)該有太多仇恨,仇恨是別人扔給你的垃圾,你又不是垃圾桶,老裝著它做什么?在公司當(dāng)算法工程師近三年了,別人怎么對我,我的心里跟明鏡似的一清二 楚。對我不好的人我并沒太在意,更別說去報復(fù)。相反,他們有事要我?guī)兔Φ臅r候,我總能真心實意的去幫,甚至主動幫忙解決問題。這是這幾年來,我對自己唯一 滿意的一點。我相信一句話:活著就是修行。但是你得清楚你修的是善行還是惡行。

    畢業(yè)三年了,看看走過的路,總覺的有點荒涼。確實真正明白了許多道理。感謝幫助過我的人,也感謝打擊過我的人。也許一個人只有親身經(jīng)歷了困難才可能真正成長起來,由此我不得不感嘆造化的殘酷。

    posted @ 2012-06-20 10:03 writegull 閱讀(214) | 評論 (0)編輯 收藏

     感謝雷鋒網(wǎng)的投遞

    編者按:本文作者郭子威,前網(wǎng)易網(wǎng)站產(chǎn)品部總監(jiān),想要聯(lián)系的讀者可以在微博上@純銀V。其實,這篇文章是打算寫“大公司抄你腫么辦?”很明顯騰訊最典型嘛,以至于我還在網(wǎng)易的時候,Boss也問我,騰訊抄你怎么辦?此時屢屢有一股邪火在胸口燃燒著,想大吼一聲:騰訊抄我怎么辦?老子跳槽去騰訊!最后我還是選擇了創(chuàng)業(yè)。


    我在網(wǎng)易5年,一直帶業(yè)務(wù)部門,從內(nèi)容總監(jiān)轉(zhuǎn)職產(chǎn)品總監(jiān),算得上資深中層吧。網(wǎng)易做產(chǎn)品的環(huán)境,放在業(yè)內(nèi)大約是中等偏上,它的好處別家未必有,弊端 則是寰球同此涼熱。年初跟VC談天使融資的時候,對方大統(tǒng)領(lǐng)換了一個問法:如果網(wǎng)易抄你怎么辦?我很吃驚地回答,如果留在網(wǎng)易就能把這個項目做出來,我還 創(chuàng)什么業(yè)?難道你以為我創(chuàng)業(yè)是為了發(fā)財、專權(quán),或者給自己戴上SB風(fēng)格的CEO頭銜?

    那么大公司到底是真老虎還是紙老虎?我得從大公司業(yè)務(wù)運作的常識說起。

    ▎部門背景
    大公司是一個籠統(tǒng)的概念,由若干個事業(yè)部>大部門>中小部門>項目組構(gòu)成。其中戰(zhàn)斗力過硬的項目組是少數(shù),王牌軍不足十分之一,而水貨項目組的占比至少超過一半。
    我們品頭論足說XX公司的產(chǎn)品做得很好,其實是某幾個項目組實力非凡。如果不與他們正面對抗,其他組做產(chǎn)品也就是60出頭的平均分。難道你連產(chǎn)品70分都沒有自信?沒這自信你還做個屁啊。

    所以在忌憚大公司之前,先摸摸底,和你競爭的大公司項目組歸屬在哪個部門下面,它又是什么背景。正如我以前對某大公司很是好奇,為什么一部分業(yè)務(wù)很爛,另一部分很贊?內(nèi)部人士答:因為它們分屬于兩個不同的事業(yè)部,一隊落魄邊沿化,另一隊則是常勝王牌軍。

    ▎業(yè)務(wù)關(guān)聯(lián)
    有些時候,你發(fā)現(xiàn)某大公司和你進(jìn)入了同一個競爭領(lǐng)域。別著急,先看看做這個項目的部門,主營業(yè)務(wù)是否和該項目在同一條中軸線上。

    由于野心的驅(qū)動,部門主管常常會批準(zhǔn)一些和主營業(yè)務(wù)關(guān)系不大的,想象空間又很大的項目,妄想別錯過金礦。然而這只是投石問路,買張彩票,主要的資源 仍然在主營業(yè)務(wù)線集中,更不可能忍受平緩的增長曲線(掘金心態(tài)嘛,哪怕掘到銅礦也會斷然放棄)。外界看見“XX公司悍然進(jìn)入XX領(lǐng)域”……屁嘞,只有做這 個項目的團(tuán)隊甘苦自知,時間緊/期待高/投入少,不掛基本上不可能。
    緊接著上一條,對大公司對手的部門背景作詳細(xì)調(diào)查,或許能解除你對那個龐然大物的恐懼心。如我以前在網(wǎng)易門戶做攝影分享社區(qū),第一年里,有8個月分到了1 位工程師的工時;接下來一年總算有3位工程師了,其中2位又是實習(xí)生。我熬了整整3年,3年吶,才熬到基本夠用的技術(shù)人員配置,那時市場機(jī)遇早已消失不 見。

    ▎公共資源
    大公司的公共資源往往包括如下部分:UED、QA、推廣位,集中調(diào)度以提高利用率。有時候運營人員也是公共資源,有時候更慘一點,連程序員都是公共資源。 雖然家底殷實,公共資源攤薄到每個項目上便很寒磣,所謂僧多粥少。項目經(jīng)理可能把自己有招聘權(quán)的人給湊齊了,但他還得腆著臉找各個公共部門老大要資源,有 時是懇求,有時是苦苦哀求。

    跪下來舔鞋都提不上工單的時候,我以前還使過一茅招,搞點部門經(jīng)費,請前端組的同事私底下幫忙切圖……當(dāng)作付費外包來對待。那時視覺稿已經(jīng)堆了個把月,沒法推進(jìn)一步。類似的木桶效應(yīng)多如牛毛,幾乎每個大公司項目都會遇到,偏偏使不上力,被短板卡得上氣不接下氣。

    即便搶到了(勉強(qiáng)夠用的)公共資源,你還得面對分配資源的隨機(jī)性問題。比如說小清新風(fēng)格的產(chǎn)品,能分到擅長此風(fēng)格的設(shè)計師嗎?不能,誰空下來分派 誰。擅長小清新的設(shè)計師當(dāng)然也有,人家正在別的項目組,即便那個項目惡俗,設(shè)計師也很不開心,做到一半怎可能中途離場。所以我以前跟PM說:有人幫你做就 快去燒香還愿,有推廣位到手就感恩熱淚盈眶,你還挑啥子挑喃?十幾個部門幾十個項目都鬧著要最好的最合適的,你讓UED情何以堪喃?

    由于公共部門采用派單制,大部分人員缺乏項目歸屬感,榮譽感,他既無法全程參與,也很難真正融入項目組里邊。座位經(jīng)常隔了幾百米,一周只能碰頭兩三 面,甚至因為參與時間短暫,就連對產(chǎn)品的理解也比較淺,應(yīng)付完這個應(yīng)付那個,“應(yīng)付了事”的心態(tài)極為常見。往往只有項目經(jīng)理把產(chǎn)品當(dāng)兒子看,別人都當(dāng)成牽 到自己家里來串門的鄰居小孩兒。

    更能理解的是,公共部門這個月做A項目的單,下個月做B的單,這個月A項目組請飯請求加班,下個月B請飯請求加班。項目上線你們倒是領(lǐng)功/打賞/休 假,下一個項目組又聲淚俱下說這單子特別重要,非得拉兄弟一把不可。這豈不是“無窮無盡的加班”“無窮無盡的拼這一仗”?你們少來誑老子……
    曾見以前合作的設(shè)計師,私底下為自己做了款玩票的APP,比當(dāng)初花兩三個月為我們部門設(shè)計的APP,起碼高出兩個等級。當(dāng)真刮目相看。

    ▎KPI

    KPI是萬惡的,沒有KPI又是萬萬不能的。

    所謂KPI,屬于體制的一部分,也是大企業(yè)病的一部分。這個世界上不靠譜的人和項目占多數(shù),衡量創(chuàng)業(yè)團(tuán)隊是否靠譜的標(biāo)準(zhǔn)很簡單——剩者為王。這是一款生存游戲。

    隨著公司活下來并且膨脹起來,自然淘汰的篩選法很快失了效。創(chuàng)業(yè)意味著高風(fēng)險和高收益,當(dāng)創(chuàng)業(yè)團(tuán)隊成長為中型公司,大公司,則個人的風(fēng)險降低(收入 增加,薪資職位穩(wěn)定),收益也降低(期權(quán)減少甚至沒有),容易滋生更多輕浮的冒險,拿公司的錢去玩自己的票,修筑各種爛尾樓。如果不用KPI來制衡,十八 般瞎折騰便掏空公司資源。人家旱澇保收底薪很高的,人家從折騰中賺到了經(jīng)驗值,就算引咎辭職,下一份工作還能拿到更高薪水的,而你老板呢,資產(chǎn)耗光只能去 擺地攤了。

    鑒定和約束各種瞎折騰的管理手段之一,我們稱之為項目KPI,即階段性的項目考核。在這個過程中證明自己靠譜,項目有戲,公司才會繼續(xù)支持你。以我 所見,雖有不少被KPI整死的好項目,但95%以上被涮掉的,確為次品,事后一齊流淚控訴KPI之惡貫滿盈,覺得失敗原因是“公司不給支持”。問題是怎么 證明你和這個項目值得更多的支持?怎么證明你是有可能成功那5%,而不是注定失敗的95%?

    老板畢竟不是天網(wǎng),他不可能什么都懂,尤其對新拓展的業(yè)務(wù),一旦超出了高層的成功經(jīng)驗領(lǐng)域,只能靠KPI來判斷項目前景。這同時意味著[要命的]公 司對項目缺乏耐心和遠(yuǎn)見。若不能看到短期數(shù)據(jù)利好,則支持度快速下降,資源供給減少,方向盤立刻打到一條名為“黃泉”的路上。預(yù)見到滅頂之災(zāi)又會干擾項目 經(jīng)理的判斷,往往使些目光短淺,飲鴆止渴的茅招出來,茍且保得眼前性命。

    ▎高層干預(yù)

    剛才提到大公司對新業(yè)務(wù)缺乏耐心和遠(yuǎn)見,這根子還在公司高層身上。所謂高層,最低也是管轄幾百人的方面大員,通常從VP起計。能做到大公司高層必有 過人之能,不幸人過30歲后對新領(lǐng)域的學(xué)習(xí)能力直線下降,再加上行政事務(wù)纏身,無法專注于業(yè)務(wù)。故而對于市場拓展,大部分高層混合了視野狹窄與剛愎自用這 兩種特質(zhì),必然大量依賴KPI管理。

    反過來看,如果高層瞄準(zhǔn)了某個項目,下決心賭上一把呢,它就會得到更多的資源和寬容,初期KPI有可能壓根不設(shè),所有公共部門都圍著你打轉(zhuǎn)。高層力 挺可以解決掉60%的大企業(yè)病,作為創(chuàng)業(yè)團(tuán)隊,遇到這樣的對手是件挺可怕的事情,還好它們只是極少數(shù),占比不足5%。而你會因為大晴天也有可能下雨沾濕 鞋,就畏畏縮縮不敢出門嗎?

    何況高層的支持是一把雙刃劍,他會給你喂足糧草,釘好蹄鐵,同時也給你戴上嚼子,圈定方向甚至策略。那么高層指定的方向策略出錯呢?恭喜,貴項目掛了。長官意志令如山,最怕長官是外行。

    另一些情況下,大公司項目因為資源不足,資源錯位而做砸,其實還是高層的決策影響。他認(rèn)為給這些支持已經(jīng)足夠看清前景,若是敗局,又何必豪賭下去。畢竟主營業(yè)務(wù)還賺錢嘛,還有得選擇,反倒是“沒得選擇”轉(zhuǎn)化為創(chuàng)業(yè)團(tuán)隊背水一戰(zhàn)的韌性所在。

    ▎齊心協(xié)力

    說句聽上去挺刺耳的話,大公司里很難談?wù)嬲凝R心協(xié)力。按我的理解,齊心協(xié)力的基石不是個人素質(zhì),而是成員都適合這個項目,喜歡這個項目,自然努力 團(tuán)結(jié)。可你加入某一家大公司,往往受其光環(huán)/福利/資歷的吸引,有個坑就猛往里跳,其后轉(zhuǎn)崗不易。做什么項目亦受到部門限制,自主權(quán)有限得很。
    換句話說,參與大公司項目組的,并不是最適合,最喜歡這個項目的人,而是項目經(jīng)理目前能搞到的人(調(diào)動、招聘以及公共部門派單)。甚至項目經(jīng)理本人也是奉 命而為,或無奈抓鬮。驅(qū)動工作的動力是職業(yè)道德,季度考核,獎金與功名,卻非你對這款產(chǎn)品的愛。老實承認(rèn),我自己即是一例。哪怕在網(wǎng)易加班極多,直到辭職 出來做有愛的產(chǎn)品,方才覺得過去皆是行尸走肉。

    而我目前的創(chuàng)業(yè)團(tuán)隊只有6個人,來自5家大公司(上市或即將上市)。你說大家放棄了高薪福利,穩(wěn)定工作,來上海做一款前途未卜的產(chǎn)品是為什么?當(dāng)然不是服了我的三尸腦神丸……

    于是我現(xiàn)在的項目速度比之前在網(wǎng)易快3倍,工作進(jìn)展有規(guī)劃,無管理,隊員的主動性之強(qiáng),內(nèi)部合作的愉快與默契是過去從未經(jīng)歷過的。兩個字:“開心”。換回大公司,那得打多少雞血開多少動員大會啊,最后有人還在會上睡著了。

    ▎人多嘴雜

    小團(tuán)隊?wèi){什么跟大公司競爭呢?有人說是“專注”,有人說是“耐心”,有人說是“遠(yuǎn)見”。這些都對,我還要補(bǔ)充一點,小團(tuán)隊一定要比大公司犯更少的錯。

    這句話聽上去挺莫名其妙的,大公司人才濟(jì)濟(jì),小團(tuán)隊?wèi){什么跟人家比正確率?回答很簡單:人才濟(jì)濟(jì),同時也人多嘴雜。給項目提意見的人越多,執(zhí)行效率 越低,這是鐵一般的定律。尤其當(dāng)建議者中包括各級領(lǐng)導(dǎo)的時候,決斷就更加飄忽不定。你非得考慮上司的立場,部門的立場,微妙的公司政治環(huán)境,固然不乏真知 灼見,合攏在一起便成噪音干擾。大量時間花費在報審/修改/開會/爭吵/寫文檔/走流程上面,行動遲緩舉棋難定,更增加誤入歧途的概率。

    相比之下,小團(tuán)隊的快速決策,快速行動,正好擊中了大公司的軟肋。一款新產(chǎn)品出來,大公司實權(quán)派發(fā)現(xiàn)它起碼得2個月,看懂它2個月,立項組好隊還得 花2個月。再加上市場前景不明朗,在創(chuàng)新者大紅大紫之前,大公司愿意投入(冒險)的資源是極少的,試水而已,復(fù)制抄襲多于革新改良,保守跟隨多于銳意開 拓。結(jié)果一兩年過去了,創(chuàng)新者勇猛精進(jìn)已成氣候,大公司才回過神來,欲與之全力一搏。人家的前期積累已領(lǐng)跑市場,后來者未必追趕得上。

    類似案例,多不勝數(shù)。創(chuàng)業(yè)者眼里唯一的好機(jī)會,大公司看來卻只是1000個模糊不清的機(jī)會之一,拿捏不定。由此逆向思維的話,創(chuàng)業(yè)團(tuán)隊最好不要插入 大公司的主營業(yè)務(wù)去虎口奪食。人家苦心經(jīng)營多年,憑借對這塊市場的理解力和戒備心,會更快發(fā)現(xiàn)你,重視你,然后高層吹響號角擊潰你。但你去開辟新戰(zhàn)場呢, 大公司跟還是不跟,用多大力跟,往哪個方向走,它就很難統(tǒng)一內(nèi)部意見。

    ▎基因轉(zhuǎn)移

    人都艷羨大公司“資源多”,所謂資源,一半是人才資源,一半是海量用戶,即推廣資源。然而不常被提及的是,大平臺的團(tuán)隊基因/用戶構(gòu)成/用戶習(xí)慣,與新項目是否吻合?;蛘呋\統(tǒng)點說,大平臺的資源優(yōu)勢是否能向新項目平滑過渡。

    我一直是“基因論”的支持者,公司實權(quán)派的個人偏好,決定了團(tuán)隊構(gòu)成與文化,進(jìn)而決定了主場優(yōu)勢與劣勢。正如APPLE在社交網(wǎng)絡(luò)幾戰(zhàn)皆敗,偉大如 Google也被Facebook壓得抬不起頭來。只是受到野心蠱惑,即便八字不合,大公司也會悍然進(jìn)入新領(lǐng)域(憑什么我不行),隨后又慘然退出(原來我 真不行)。

    比團(tuán)隊基因更令人惱火的,是用戶基因,即當(dāng)前用戶群的構(gòu)成與使用習(xí)慣。做產(chǎn)品經(jīng)常遇到“跨域”這個問題,借勢推廣也一樣。新項目的產(chǎn)品訴求,用戶構(gòu) 成,如果和母體在同一個域內(nèi),則資源優(yōu)勢平滑過渡,對競爭者是致命的殺傷力。但其實……平滑過渡又是一件特別不多見的事情。有時新項目整個的跨域,比如騰 訊做拍拍,做朋友,導(dǎo)入損耗率驚人;有時大平臺向垂直市場細(xì)分,無法精準(zhǔn)過濾推廣目標(biāo),導(dǎo)入用戶良莠不齊得厲害,對于重視“氣質(zhì)、氛圍”的垂直市場則是拔 苗助長。

    以我之前做網(wǎng)易攝影為例,不推吧,在大公司做產(chǎn)品跟創(chuàng)業(yè)有多大區(qū)別,生怕浪費了資源。推吧,不搭邊的人路過都來踩一腳,各種低端用戶、自拍用戶、審 美低下熱情萬丈的中老年用戶蜂擁而入,氛圍混亂,運營成本指數(shù)級上升,最終受困多過受益。反倒是獨立攝影產(chǎn)品如圖蟲,用戶氣味相投而來,自然增長營造的社 區(qū)氣質(zhì)遠(yuǎn)勝從大平臺引流,氣質(zhì)恰恰又是社區(qū)的核心競爭力。

    做產(chǎn)品,鮮有一夜暴富,尤其UGC,口碑帶動增長才是最穩(wěn)健的方法。道理固然大路貨,KPI壓力下卻容易急于求成。母體供血一旦大量摻水,相當(dāng)于修 煉邪道武功,起步快而后力不濟(jì),很快會觸碰到天花板。這時大平臺所謂海量用戶,反倒成為盛滿鮮花的陷阱,涂抹蜜糖的慢性毒藥。好似小時候四環(huán)素治病,長大 后燦然一笑露出滿口黃牙。

    總之,在大公司里做產(chǎn)品的雷區(qū)多多。與內(nèi)部環(huán)境作戰(zhàn)所使的力氣,往往占到血槽的2/3強(qiáng),只留下不足1/3去對付市場。它抄你,不見得就打得過你。 它是個大家伙,但也喜歡把兩個腳拇指綁起來走路。在多數(shù)情況下,大公司的新項目只是全身掛滿鉆石鐐銬的,虛弱的巨人,被它抄死多半說明你太遜色,而不是大 家伙太兇惡。
    不過,這個行業(yè)的主流論調(diào)并不這么看。

    最近幾個月,各式各樣的人紛紛來問我,既然立志創(chuàng)新,大公司抄你怎么辦?

    對這個問題,我有各種具體的回答,但都不是真心話。只是面對某些人,比如投資人的時候,你跟他講虛的,會被當(dāng)成噴子,得表示我有明確的對策……其實對策易變,反倒是“產(chǎn)品哲學(xué)”這類虛的東西更加恒定。

    我真心的態(tài)度可以用三次自問自答來概括。

    1、我的產(chǎn)品質(zhì)量能不能打敗跟隨者,至少是與跟隨者各擅其長?

    如果做不到,這不是我被抄的問題,是我太挫,我認(rèn)栽。競爭會刺激我提高產(chǎn)品質(zhì)量,未必是一件壞事。

    2、假定產(chǎn)品通過創(chuàng)新,打開一個新的細(xì)分市場,這個市場是否足夠大,大到可以容納下多個競爭者同時生存?

    如此則對手亦是隊友,我們一邊互相作戰(zhàn),一邊共同開墾荒地,聯(lián)手培育市場。即便最后我只拿到第三、第四的份額,也不錯啊,誰規(guī)定創(chuàng)新者就非得獨吞整個市場不可——初夜權(quán)不等于占有權(quán),市場又不是從一而終的貞潔牌坊。

    3、除了用戶口碑之外,產(chǎn)品是否有具象化的的價值沉淀?

    比如黏性強(qiáng)的用戶關(guān)系,比如用戶留存的他看重的內(nèi)容,比如有忠誠度的優(yōu)質(zhì)內(nèi)容發(fā)布者,比如含金量與時效性較長的信息。這些沉淀即防御壁壘,從產(chǎn)品架構(gòu)階段就應(yīng)該提前考慮,決定了防守反擊的難度。

    所以別人來不來抄這種事情,我從來都是不大關(guān)心的,偶爾想想,從不憂慮。周鴻祎有句話說得很好,少盯著對手,多研究用戶。一天到晚擔(dān)心“騰訊抄我怎 么辦”?擔(dān)心有屁用啊,萬一產(chǎn)品做得不好,騰訊抄都不屑于抄,那得白白浪費多少腦能量。我只管埋頭做自己的產(chǎn)品,洪興罩我去戰(zhàn)斗~

    換個角度看,哪怕比較倒霉,很快被大公司看得起并臨幸了,對手在高層力挺下全力以赴地復(fù)制并改良,它的基因剛好又平滑過渡……那么,我掛了。但產(chǎn)品 創(chuàng)新若是如我所愿地打開某個細(xì)分市場,改善某類用戶體驗,作為始作俑者,老子傾家蕩產(chǎn),雖敗猶榮。“小小改變世界”比“賺到一千萬”更值得追求。

    正如我在微博里所說:阻擋你創(chuàng)新的是“無能”而不是“抄襲”,鼓舞你創(chuàng)新的是內(nèi)心驕傲而不是永遠(yuǎn)獨占鰲頭。

    文/benimaru zhang

    posted @ 2012-06-14 10:08 writegull 閱讀(229) | 評論 (0)編輯 收藏

    openURL的使用方法:[[UIApplication sharedApplication] openURL:[NSURL URLWithString:appString]];
    其中系統(tǒng)的appString有:
    1.Map http://maps.google.com/maps?q=Shanghai 
    2.Email mailto://myname@google.com 
    3.Tel tel://10086 
    4.Msg sms://10086 


    openURL能幫助你運行Maps,SMS,Browser,Phone甚至其他的應(yīng)用程序。這是iPhone開發(fā)中我經(jīng)常需要用到的一段代碼,它僅僅只有一行而已。

    //打開地圖

    - (IBAction)openMaps {
    NSString*addressText = @"beijing"; //@"1Infinite Loop, Cupertino, CA 95014"; 
    addressText =[addressText stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
    NSString*urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",addressText]; 
    NSLog(@"urlText=============== %@", urlText); 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
    }

    //打開mail

    - (IBAction)openEmail { 

    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"mailto://devprograms@apple.com"]];

     }


    //撥打電話 

    - (IBAction)openPhone {

     [[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8004664411"]]; 

    }

    使用這種方式撥打電話時,當(dāng)用戶結(jié)束通話后,iphone界面會停留在電話界面。
    用如下方式,可以使得用戶結(jié)束通話后自動返回到應(yīng)用:
    UIWebView*callWebview =[[UIWebView alloc] init];
    NSURL *telURL =[NSURL URLWithString:@"tel:10086"];// 貌似tel:// 或者 tel: 都行
    [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
    //記得添加到view上
    [self.view addSubview:callWebview];

     還有一種私有方法:(可能不能通過審核)
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://10086"]];


    //打開短信

    - (IBAction)openSms { 

    [[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"sms://466453"]];

    }


    //打開瀏覽器

    -(IBAction)openBrowser { 

    [[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]]; 

    }

    posted @ 2012-06-13 17:09 writegull 閱讀(598) | 評論 (0)編輯 收藏

    北京時間6月9日消息,據(jù)外國媒體報道,谷歌在招聘員工和工程師時,往往會問應(yīng)聘者有關(guān)技術(shù)方面的問題。蘋果卻大不相同,總是會司會問一些腦筋急轉(zhuǎn)彎風(fēng)格的問題,提出一些與硬件規(guī)格相關(guān)的問題,此舉似乎更多的是希望從潛在的員工身上挖掘更多的創(chuàng)造力。蘋果的這些問題不僅針對技術(shù)人員,甚至還針對銷售人員和其他特殊人員。以下就是美國網(wǎng)站GlassDoor提供的蘋果在面試應(yīng)聘人員的最有趣味性的15道題目:

      1、桌上放置了一部舊iPhone,你能看到哪些材料?

      招聘職位:產(chǎn)品設(shè)計工程師。

      在蘋果公司工作的多數(shù)員工,都會了解供應(yīng)鏈的成本事務(wù),以確保盡可能地減少生產(chǎn)手機(jī)的產(chǎn)品成本。蘋果手機(jī)是極具價格競爭優(yōu)勢的產(chǎn)品,所以你必須知道如何從事控制成本相關(guān)的工作。因此,具備專業(yè)的材料及其屬性相關(guān)的經(jīng)驗將有助于你在生產(chǎn)手機(jī)設(shè)備時降低成本。

      2、描述使用蘋果產(chǎn)品的情況

      招聘職位:銷售員。

      如果你想銷售蘋果產(chǎn)品,最好已經(jīng)是蘋果用戶。無論如何,蘋果不會聘用一個從未使用蘋果iPhone手機(jī)的人來擔(dān)任公司的銷售員工。

      3、如果測試部門否決了500臺洗衣機(jī),那么你將如何查找根源并找到解決之道?

      招聘職位:產(chǎn)品質(zhì)量工程師。如果在生產(chǎn)中發(fā)生了故障,就可能會導(dǎo)致數(shù)百部iPhone手機(jī)受損,甚至也可能會此起成千上萬的收入受損。如果你想管理產(chǎn)品質(zhì)量,那么就必須確保你能夠發(fā)現(xiàn)所有產(chǎn)生的問題,特別是那些在供應(yīng)鏈初期階段就出現(xiàn)的問題。

      4、你如何在資源非常有限的環(huán)境下將處理網(wǎng)絡(luò)、文件系統(tǒng)、用戶界面系統(tǒng)等的線程模型轉(zhuǎn)化成用戶空間框架?

      招聘職位:軟件工程師。

      編寫運營程序的代碼較為容易,但是要讓它有效的工作就會很難了,特別是當(dāng)你為手機(jī)設(shè)計軟件時,你必須依賴低功率的芯片來確保電池壽命延長。

      5、你如何計算來自中國的蘋果供應(yīng)量?

      招聘職位:材料項目經(jīng)理。

      他們正在探討字面意義上的蘋果,如你所知,就是水果。不過,這也是一道非?;A(chǔ)的供應(yīng)問題。如果你負(fù)責(zé)管理供應(yīng)鏈,那么你就需要確切的知道供應(yīng) 商供應(yīng)何種產(chǎn)品、以及能夠提供什么樣的材料。蘋果公司幾乎為其生產(chǎn)的智能手機(jī)購買所有最好的元件,如果你能夠充分了解整個供應(yīng)鏈,那就能夠減少成本。

      6、使用運營放大器來設(shè)計一個LED驅(qū)動

      招聘職位:硬件工程師。

      通常情況下,產(chǎn)品不會在非常優(yōu)化的環(huán)境下運行。事實上,運行環(huán)境要么太熱、要么太冷、甚至還會在水中。因此,你必須確保你的產(chǎn)品能夠在非最優(yōu)化的環(huán)境下運行。

      7、如何診斷緩沖溢出問題?

      招聘職位:軟件工程師。

      通常情況下,確定誰是最有才華工程師的最佳方法就是問他們?nèi)绾稳ソ鉀Q問題。緩沖溢出問題一旦產(chǎn)生,就可能會引發(fā)巨大災(zāi)難,因此,如果你想測試你的工程師在極端復(fù)雜問題面前如何采取什么行動的話,那么這將是值得提問的好問題。

      8、你有100個編號的燈泡,在第一環(huán)節(jié)中都打開這些燈泡,然后再換上其它的新燈泡,依次類推,這樣100次過后,還有多少個燈泡在亮著?

      招聘職位:高級軟件工程師。

      實際上,蘋果的面試官并不是最傳統(tǒng)的人,他們會從Khan Academy網(wǎng)站引用一些腦經(jīng)急轉(zhuǎn)彎風(fēng)格的問題,但是,這些問題一般都是涉及一些數(shù)學(xué)技巧的復(fù)雜問題,因此,要想測試一個工程師解決問題的能力,這些問題都將是值得提出的好問題。

      9、你如何及時地關(guān)注科技新聞?

      招聘職位:Mac人才。

      如果你想運營蘋果零售商店,那么還需要確保你具備一種認(rèn)知感覺——即了解人們?nèi)绾螐男侣勚欣斫馓O果公司。蘋果的面試官想以此了解應(yīng)聘人員是否會瀏覽TechCrunch、heck或Business Insider之類的網(wǎng)站。

      10、你從一個6×6的網(wǎng)格的左上方開始,可以向下或者向右移動,那么你會有多少種方法能夠到達(dá)網(wǎng)格的右下角?

      招聘職位:高級軟件工程師。

      這是一個叫作“路徑計算”的問題,也是最基本的一種腦筋急轉(zhuǎn)彎問題,這樣的問題旨在測試應(yīng)聘人員如何思考問題,以及能否找到解決問題的方法。蘋 果會向他們的部分高級軟件工程師提出一些更加瘋狂的此類問題,這一點也不足為奇。這樣的問題也取自于Khan Academy。

      11、你如何檢驗表面曲率的連續(xù)性?

      招聘職位:CAD制圖員。

      蘋果為自己的設(shè)備繪制了大量的原型——例如iPhone和iPad的原型等。那些原型都需要進(jìn)行測試,因此,你需要讓一些人快速的繪制出原型。但是,還要保證與蘋果的其它設(shè)備保持一致,因此,你需要確保你的制圖員和設(shè)計師具備完美的意識,甚至設(shè)計玻璃的形狀。

      12、找到鏈接列表的中間點

      招聘職位:Cocoa camp。

      蘋果會要求他們的軟件工程師提供一個更明智的解決方案。例如,你可能會獲得兩個“指示器”,一個指示器在鏈接列表中每次移動一步,另一個每次移動兩步。當(dāng)另一指示器到達(dá)終點時,那么第一個指示器所處的位置就是鏈接列表的中間點。

      13、如果你可以帶一件科技產(chǎn)品到偏遠(yuǎn)的地方,那會是什么?

      招聘職位:專員。

      這是一個帶有“欺騙性”的問題,蘋果可能是在測試你是否喜歡iPhone手機(jī)。在蘋果店的銷售人員(蘋果店專家就是干這個的)必須非常喜歡蘋果產(chǎn)品。

      14、在金屬片上打出5個洞眼的方法?

      招聘職位:產(chǎn)品設(shè)計工程師。

      蘋果需要確保其設(shè)計師和硬件工程師至少都具備一定的創(chuàng)造力,即使他們必須成為超級技術(shù)專家,因此,即使是讓你在金屬片上打洞這樣的簡單問題也可能會有很多的解決方法。事實上,蘋果是在測試應(yīng)聘人員的創(chuàng)造力。

      15、你認(rèn)為中學(xué)里什么樣的群體最好或最簡單?

      招聘職位:專員

      如果你想在蘋果商店中挑出那些更可能購買蘋果產(chǎn)品的專門用戶,你就需要具備了解這些用戶是什么樣的人,無論他們是否購買蘋果產(chǎn)品,你都需要作出記號,并盡可能快地區(qū)別出來。 

     

    posted @ 2012-06-09 14:23 writegull 閱讀(321) | 評論 (0)編輯 收藏


    屏幕快照 2010-12-27 上午10.20.03

    實現(xiàn)如下代碼:

    - (void)viewDidLoad {
    [super viewDidLoad];
    segmentedControl=[[UISegmentedControl alloc] initWithFrame:CGRectMake(80.0f, 8.0f, 70.0f, 25.0f) ];
    [segmentedControl insertSegmentWithTitle:@"T+" atIndex:0 animated:YES];
    [segmentedControl insertSegmentWithTitle:@"T-" atIndex:1 animated:YES];
    segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
    segmentedControl.momentary = YES;
    segmentedControl.multipleTouchEnabled=NO;
    [segmentedControl addTarget:self action:@selector(Selectbutton:) forControlEvents:UIControlEventValueChanged];
    UIBarButtonItem *segButton = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
    [segmentedControl release];
    self.navigationItem.rightBarButtonItem = segButton;
    [segButton release];

    }

    -(void)Selectbutton:(int)sender{
    UISegmentedControl *myUISegmentedControl=(UISegmentedControl *)sender;
    NSLog(@”!!!!!!!!%d”,myUISegmentedControl.selectedSegmentIndex);
    switch (myUISegmentedControl.selectedSegmentIndex) {
    case 1:
    break;
    case 0:
    break;
    default:
    break;
    }
    }

    segmentedControl 中的字體也是可以改動的,代碼如下:

    -(void)ChangeSegmentFont:(UIView *)aView
    {
    if ([aView isKindOfClass:[UILabel class]]) {
    UILabel *lb = (UILabel    *)aView;
    [lb setTextAlignment:UITextAlignmentCenter];
    [lb setFrame:CGRectMake(0, 0, 80, 25)];
    [lb setFont:[UIFont systemFontOfSize:18]];
    }
    NSArray *na = [aView subviews];
    NSEnumerator *ne = [na objectEnumerator];
    UIView *subView;
    while (subView = [ne nextObject]) {
    [self ChangeSegmentFont:subView];
    }
    }

    在需要調(diào)用此方法的地方加入下面方法即可(分段控件中已經(jīng)有分段按鈕時調(diào)用)

    [self ChangeSegmentFont:UISegmentedControl的對象];

    即可

    posted @ 2012-05-03 17:34 writegull 閱讀(4411) | 評論 (0)編輯 收藏

    文章出處:http://blog.csdn.net/iukey

    UIKit提供了一組控件:UISwitch開關(guān)、UIButton按鈕、UISegmentedControl分段控件、UISlider滑塊、UITextField文本字段控件、UIPageControl分頁控件。

    控件是對UIView派生類的實用增強(qiáng)及補(bǔ)充,并可以直接附著于導(dǎo)航欄、表格單元,甚至更大的對象。

    這些控件的基類均是UIControl,而UIControl派生自UIView類,所以每個控件都有很多視圖的特性,包括附著于其他視圖的能力。所有控件都擁有一套共同的屬性和方法。

    所以學(xué)習(xí)控件,我們先學(xué)習(xí)UIControl。

    屬性

    enabled

    控件默認(rèn)是啟用的。要禁用控件,可以將enabled屬性設(shè)置為NO,這將導(dǎo)致控件忽略任何觸摸事件。被禁用后,控件還可以用不同的方式顯示自己,比如變成灰色不可用。雖然是由控件的子類完成的,這個屬性卻存在于UIControl中。

    selected

    當(dāng)用戶選中控件時,UIControl類會將其selected屬性設(shè)置為YES。子類有時使用這個屬性來讓控件選擇自身,或者來表現(xiàn)不同的行為方式。

    contentVerticalAlignment

    控件如何在垂直方向上布置自身的內(nèi)容。默認(rèn)是將內(nèi)容頂端對其,對于文本字段,可能會改成UIControlContentVerticalAlignmentCenter。對于這個字段,可以使用下列諸值:

    1. UIControlContentVerticalAlignmentCenter  
    2. UIControlContentVerticalAlignmentTop  
    3. UIControlContentVerticalAlignmentBottom  
    4. UIControlContentVerticalAlignmentFill  
    contentHorizontalAlignment

    水平對齊方式,可以只用下列值:

    1. UIControlContentHorizontalAlignmentCenter  
    2. UIControlContentHorizontalAlignmentTop  
    3. UIControlContentHorizontalAlignmentBottom  
    4. UIControlContentHorizontalAlignmentFill  

    事件通知

    UIControl類提供了一個標(biāo)準(zhǔn)機(jī)制,來進(jìn)行事件登記和接收。這令你可以指定你的控件在發(fā)生特定事件時,通知代理類的一個方法。如果要注冊一個事件,可以使用addTarget方法:

    1. [ myControl addTarget: myDelegate   
    2.             action:@selector(myActionmethod:)  
    3.             forControlEvents:UIControlEventValueChanged ];  
    事件可以用邏輯OR合并在一起,因此可以再一次單獨的addTarget調(diào)用中指定多個事件。下列事件為基類UIControl所支持,除非另有說明,也適用于所有控件。

    UIControlEventTouchDown

    單點觸摸按下事件:用戶點觸屏幕,或者又有新手指落下的時候。

    UIControlEventTouchDownRepeat

    多點觸摸按下事件,點觸計數(shù)大于1:用戶按下第二、三、或第四根手指的時候。

    UIControlEventTouchDragInside

    當(dāng)一次觸摸在控件窗口內(nèi)拖動時。

    UIControlEventTouchDragOutside

    當(dāng)一次觸摸在控件窗口之外拖動時。

    UIControlEventTouchDragEnter

    當(dāng)一次觸摸從控件窗口之外拖動到內(nèi)部時。

    UIControlEventTouchDragExit

    當(dāng)一次觸摸從控件窗口內(nèi)部拖動到外部時。

    UIControlEventTouchUpInside

    所有在控件之內(nèi)觸摸抬起事件。

    UIControlEventTouchUpOutside

    所有在控件之外觸摸抬起事件(點觸必須開始與控件內(nèi)部才會發(fā)送通知)。

    UIControlEventTouchCancel

    所有觸摸取消事件,即一次觸摸因為放上了太多手指而被取消,或者被上鎖或者電話呼叫打斷。

    UIControlEventTouchChanged

    當(dāng)控件的值發(fā)生改變時,發(fā)送通知。用于滑塊、分段控件、以及其他取值的控件。你可以配置滑塊控件何時發(fā)送通知,在滑塊被放下時發(fā)送,或者在被拖動時發(fā)送。

    UIControlEventEditingDidBegin

    當(dāng)文本控件中開始編輯時發(fā)送通知。

    UIControlEventEditingChanged

    當(dāng)文本控件中的文本被改變時發(fā)送通知。

    UIControlEventEditingDidEnd

    當(dāng)文本控件中編輯結(jié)束時發(fā)送通知。

    UIControlEventEditingDidOnExit

    當(dāng)文本控件內(nèi)通過按下回車鍵(或等價行為)結(jié)束編輯時,發(fā)送通知。

    UIControlEventAlltouchEvents

    通知所有觸摸事件。

    UIControlEventAllEditingEvents

    通知所有關(guān)于文本編輯的事件。

    UIControlEventAllEvents

    通知所有事件。

    除了默認(rèn)事件以外,自定義控件類還可以用0x0F000000到0x0FFFFFFF之間的值,來定義他們自己的時間。

    要刪除一個或多個事件的相應(yīng)動作,可以使用UIControl類的removeTarget方法。使用nil值就可以將給定事件目標(biāo)的所有動作刪除:

    1. [ myControl removeTarget:myDelegate   
    2.                   action:nil  
    3.                   forControlEvents:UIControlEventAllEvents];  
    要取得關(guān)于一個控件所有指定動作的列表,可以使用allTargets方法。這個方法返回一個NSSet,其中包含事件的完整列表:

    1. NSSet* myActions = [myConreol allTargets ];  
    另外,你還可以用actionsForTarget方法,來獲取針對某一特定事件目標(biāo)的全部動作列表:
    1. NSArray* myActions = [ myControl actionForTarget:UIControlEventValueChanged ];  

    如果設(shè)計了一個自定義控件類,可以使用sendActionsForControlEvent方法,為基本的UIControl事件或自己的自定義事件發(fā)送通知。例如,如果你的控件值正在發(fā)生變化,就可以發(fā)送相應(yīng)通知,通過控件的代碼可以指定時間目標(biāo),這個通知將被傳播到這些指定的目標(biāo)。例:

    1. [ self sendActionsForControlEvents:UIControlEventValueChanged ];  
    當(dāng)委托類得到事件通知時,他將收到一個指向事件發(fā)送者的指針。下面的例子用于處理分段控件的事件,你的動作方法(action method)應(yīng)遵循類似的處理方式:

    1. -(void) myAction:(id)sender{  
    2.        UISegmentedControl* control = (UISegmentedControl*)sender;  
    3.        if(control == myControl1){  
    4.         /*查詢控件得值*/  
    5.       /*響應(yīng)myControl1的動作*/  
    6.        }  
    7. }  

    此文到此結(jié)束,如果你能耐心看看這篇文章,對你后面具體的控件會有事半功倍的效果。
    posted @ 2012-04-28 17:21 writegull 閱讀(2900) | 評論 (1)編輯 收藏

    保存你的私鑰,轉(zhuǎn)移到其它系統(tǒng)

    將你的私鑰安全的保存,如果你需要在多臺電腦上開發(fā)或者重裝你的操作系統(tǒng)的。如果沒有私鑰,那么將無法再Xcode簽名或者在apple設(shè)備上測試應(yīng)用。當(dāng)一個CSR被生成,Keychain Access應(yīng)用在你的登錄keychain里面生成一個私鑰,這個私鑰是和你的用戶賬戶關(guān)聯(lián)的,如果在系統(tǒng)重裝的時候是無法重新生成的。如果你希望在多個系統(tǒng)上做開發(fā)或者測試,那么你需要在所有你工作的系統(tǒng)之上導(dǎo)入你的私鑰。

    1、 導(dǎo)出私鑰和數(shù)字證書是為安全保存和能夠在多臺電腦上進(jìn)行工作。打開Keychain Access應(yīng)用選擇’KEY’分類。

    2、 右鍵點擊和你iphone開發(fā)證書關(guān)聯(lián)的私鑰,并在彈出菜單中選擇導(dǎo)出選項。

    3、 使用(.p12)保存包含了你個人信息的鑰匙。

    4、 你將會被提示創(chuàng)建一個密碼。

    現(xiàn)在可以通過.p12文件在不同系統(tǒng)之間傳輸。雙擊.p12在其他系統(tǒng)上進(jìn)行安裝。輸入你在step4輸入的密碼。

    posted @ 2012-04-27 10:40 writegull 閱讀(625) | 評論 (0)編輯 收藏

       在編譯好的真機(jī)版目錄下的.app文件,至于生成真機(jī)可以運行的app的方法,有兩種方式,一種是交99美元獲得一個證書,另外一種是破解的方式,在此不再詳述,本文假設(shè)你已經(jīng)生成了真機(jī)上可以運行的app包了(app包實際上是一個文件夾

       假設(shè)此安裝包的名稱是 hello.app,點擊右鍵,選擇 顯示包內(nèi)容,這樣就可以打開這個hello.app文件夾了,在此文件夾中有一個info.plist文件,打開它,新增加一個名為SignerIdentity的key字段,內(nèi)容為Apple iPhone OS Application Signing。

    然后將.app拖到itunes就生成ipa了.默認(rèn)名字應(yīng)該是hello.ipa

    如果要將此ipa分發(fā)出去,可以在itunes中的hello.ipa文件上點擊鼠標(biāo)右鍵,選擇 在finder中顯示,就可以得到生成后的ipa安裝文件了

    posted @ 2012-04-26 09:50 writegull 閱讀(1182) | 評論 (0)編輯 收藏

    1.在Windows下打開/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.1.sdk/SDKSettings.plist ,找到CODE_SIGNING-REQUIRED 將它對應(yīng)的值改為NO。

    2.打開Xcode創(chuàng)建/打開一個項目,把Code signing identity和Any ios 對應(yīng)的值改為Don’t Code Sign 

    3.Build and Run!Enjoy!
    posted @ 2012-04-26 09:42 writegull 閱讀(236) | 評論 (0)編輯 收藏

    1.程序圖標(biāo)app icon ------ 普屏 icon.png[57*57] 視網(wǎng)膜屏icon@2x.png[114*114]

    iPhone開發(fā)中經(jīng)常用到的控件尺寸大集合

    Sizes of iPhone UI Elements


    iPhone UI 設(shè)計的一些標(biāo)準(zhǔn)尺寸1 - 懶得喘氣 - 懶得喘氣的博客
    ElementSize (in points)
    Window (including status bar)320 x 480 pts
    Status Bar
    (How to hide the status bar)
    20 pts
    View inside window 
    (visible status bar)
    320 x 460
    Navigation Bar44 pts
    Nav Bar Image /
    Toolbar Image
    up to 20 x 20 pts (transparent PNG)
    Tab Bar49 pts
    Tab Bar Iconup to 30 x 30 pts (transparent PNGs)
    Text Field31 pts
    Height of a view inside 
    a navigation bar
    416 pts
    Height of a view inside 
    a tab bar
    411 pts
    Height of a view inside 
    a navbar and a tab bar
    367 pts
    Portrait Keyboard height216 pts
    Landscape Keyboard height140 pts
    Points vs. Pixels
    The iPhone 4 introduced a high resolution display with twice the pixels of previous iPhones. However you don't have to modify your code to support high-res displays; the coordinate system goes by points rather than pixels, and the dimensions in points of the screen and all UI elements remain the same.
    iOS 4 supports high resolution displays (like the iPhone 4 display) via the scale property on UIScreen, UIView, UIImage, and CALayer classes. If the object is displaying high-res content, its scale property is set to 2.0. Otherwise it defaults to 1.0.
    All you need to do to support high-res displays is to provide @2x versions of the images in your project. See the checklist for updating to iOS4 or Apple documentation for Supporting High Resolution Screens for more info.
    Adjusting Sizes
    Click here to see how to adjust View Frames and Bounds.
    Additional References
    Table 8-1  Custom icons and images

    Description

    Size for iPhone and iPod touch (in pixels)

    Size for iPad (in pixels)

    Guidelines

    Application icon (required for all apps)

    57 x 57

    114 x 114 (high resolution)

    72 x 72

    “Application Icons”

    App Store icon (required for all apps)

    512 x 512

    512 x 512

    “Application Icons”

    Launch image (required for all apps)

    320 x 480

    640 x 960 (high resolution)

    For portrait:

    • 768 x 1004

    For landscape:

    • 1024 x 748

    “Launch Images”

    Small icon for Spotlight search results and Settings (recommended)

    29 x 29

    58 x 58 (high resolution)

    50 x 50 for Spotlight search results

    29 x 29 for Settings

    “Small Icons”

    Document icon (recommended for custom document types)

    22 x 29

    44 x 58 (high resolution)

    64 x 64

    320 x 320

    “Document Icons”

    Web clip icon (recommended for web apps and websites)

    57 x 57

    114 x 114 (high resolution)

    72 x 72

    “Web Clip Icons”

    Toolbar and navigation bar icon (optional)

    Approximately 20 x 20

    Approximately 40 x 40 (high resolution)

    Approximately 20 x 20

    “Icons for Navigation Bars, Toolbars, and Tab Bars”

    Tab bar icon (optional)

    Approximately 30 x 30

    Approximately 60 x 60 (high resolution)

    Approximately 30 x 30

    “Icons for Navigation Bars, Toolbars, and Tab Bars”

    Newsstand icon for the App Store (requiredfor Newsstand apps)

    At least 512 pixels on the longest edge

    At least 512 pixels on the longest edge

    “Newsstand Icons”

    posted @ 2012-04-26 09:31 writegull 閱讀(8961) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 日本免费A级毛一片| 国产成人毛片亚洲精品| 少妇性饥渴无码A区免费 | 最新亚洲人成无码网站| 亚洲制服中文字幕第一区| ZZIJZZIJ亚洲日本少妇JIZJIZ| 成人无遮挡毛片免费看| 亚洲免费视频观看| 国产一级片免费看| 国产成人无码精品久久久久免费| 亚洲中文无码mv| 亚洲区视频在线观看| 久久久久亚洲精品美女| 亚洲一区二区三区AV无码 | 特级毛片全部免费播放a一级| 亚洲男人的天堂久久精品| 亚洲国产精品lv| 亚洲成AV人在线播放无码| 亚洲中文字幕丝袜制服一区| 俄罗斯极品美女毛片免费播放| 午夜a级成人免费毛片| 四虎国产精品免费久久| 国产h视频在线观看网站免费| 香蕉免费一区二区三区| 久久精品国产免费一区| 伊人久久大香线蕉免费视频| jizz免费一区二区三区| av片在线观看永久免费| 免费的黄网站男人的天堂 | 免费一级一片一毛片| 大学生a级毛片免费观看| 九九九精品成人免费视频| 在线永久看片免费的视频| 免费观看黄色的网站| 美女被免费喷白浆视频| 日韩欧美一区二区三区免费观看| 免费观看美女用震蛋喷水的视频| 在线视频精品免费| 女人18毛片a级毛片免费视频| 午夜视频在线在免费| 国产伦一区二区三区免费|