posts - 9,  comments - 0,  trackbacks - 0
          1.Add a new "revision.h"file
          2.Add a new Run script for the target 
          3.
           input the REV=`svnversion -nc | /usr/bin/sed -'s/^[^:]*://;s/[A-Za-z]//'`
          BASEVERNUM=`/usr/libexec/PlistBuddy -"Print :CFBundleShortVersionString" "${INFOPLIST_FILE}"`
          /usr/libexec/PlistBuddy -"Set :CFBundleVersion $BASEVERNUM.$REV" "${INFOPLIST_FILE}"

          4.clean the target and run
          posted @ 2011-08-15 12:11 雨 閱讀(279) | 評論 (0)編輯 收藏
          http://developer.apple.com/library/ios/#qa/qa1686/_index.html
          posted @ 2011-06-14 10:12 雨 閱讀(143) | 評論 (0)編輯 收藏

          1: 為工程運行時加入 NSZombieEnabled 環境變量,并設為啟用,則在 EXC_BAD_ACCESS 發生時,XCode 的 Console 會打印出問題描述。

          首先雙擊 XCode 工程中,Executables 下的 可執行模組,


          在彈出窗口中,Variables to be set in the environment,添加 NSZombieEnabled,并設定為 YES,點擊選中復選框啟用此變量。

          這樣,運行 Objective-C 時會看到控制臺輸出錯誤信息

          這條消息對于定位問題有很好的提示作用。但是很多時候,只有這條提示是不夠的,我們需要更多的提示來幫助定位問題,這時候再加入 MallocStackLogging 來啟用malloc記錄。

          當錯誤發生后,在終端執行:

          malloc_history ${App_PID} ${Object_instance_addr}

              則會獲得相應的 malloc 歷史記錄,比如對于上一個控制臺輸出

          Untitled[3646:a0f] *** -[CFString release]: message sent to deallocated instance 0x10010d340

              則我們可以在終端執行,結果如下:

          Buick-Wongs-MacBook-Pro:Downloads buick$ malloc_history 3646 0x10010d340
          malloc_history Report Version: 2.0
          Process: Untitled [3646]
          Path: /Users/buick/Desktop/Untitled/build/Debug/Untitled
          Load Address: 0×100000000
          Identifier: Untitled
          Version: ??? (???)
          Code Type: X86-64 (Native)
          Parent Process: gdb-i386-apple-darwin [3638]

          Date/Time: 2011-02-01 15:07:04.181 +0800
          OS Version: Mac OS X 10.6.6 (10J567)
          Report Version: 6

          ALLOC 0x10010d340-0x10010d357 [size=24]: thread_7fff70118ca0 |start | main | objc_msgSend | lookUpMethod | prepareForMethodLookup | _class_initialize | +[NSString initialize] | objc_msgSend | lookUpMethod | prepareForMethodLookup | _class_initialize | NXCreateMapTableFromZone | malloc_zone_malloc
          —-
          FREE 0x10010d340-0x10010d357 [size=24]: thread_7fff70118ca0 |start | main | objc_msgSend | lookUpMethod | prepareForMethodLookup | _class_initialize | _finishInitializing | free

          ALLOC 0x10010d340-0x10010d357 [size=24]: thread_7fff70118ca0 |start | main | -[NSPlaceholderString initWithString:] | objc_msgSend | lookUpMethod | prepareForMethodLookup | _class_initialize | _class_initialize | +[NSMutableString initialize] | objc_msgSend | lookUpMethod | prepareForMethodLookup | _class_initialize | NXCreateMapTableFromZone | malloc_zone_malloc
          —-
          FREE 0x10010d340-0x10010d357 [size=24]: thread_7fff70118ca0 |start | main | -[NSPlaceholderString initWithString:] | objc_msgSend | lookUpMethod | prepareForMethodLookup | _class_initialize | _class_initialize | _finishInitializing | free

          ALLOC 0x10010d340-0x10010d35f [size=32]: thread_7fff70118ca0 |start | main | -[NSCFString substringWithRange:] | CFStringCreateWithSubstring | __CFStringCreateImmutableFunnel3 | _CFRuntimeCreateInstance | malloc_zone_malloc

              這樣就可以很快的定位出問題的代碼片段了,注意輸出的最后一行,,,這行雖然不是問題的最終原因,但是離問題點已經很近了,隨著它找下去,八成就會找到問題。

          posted @ 2011-02-21 09:51 雨 閱讀(377) | 評論 (0)編輯 收藏
           1 NSMutableString*tempString=[[NSMutableString alloc]initWithFormat:@"%@",@"testmemory"];
           2     NSLog(@"tempString retainCount-----%D",[tempString retainCount]);
           3     NSLog(@"tempString -----%p---%p",tempString,&tempString);
           4     
           5     NSMutableString*string1=[tempString retain];
           6     NSLog(@"string1 retainCount-----%D",[string1 retainCount]);
           7     NSLog(@"string1 -----%p---%p",string1,&string1);
           8     
           9     NSMutableString*string2=[tempString mutableCopy];
          10     NSLog(@"string2 retainCount-----%D",[string2 retainCount]);
          11     NSLog(@"string2 -----%p---%p",string2,&string2);
          12     
          13     
          14     NSString*s=[[NSString alloc]initWithFormat:@"%@",@"hello"];
          15     NSLog(@"s retainCount-----%D",[s retainCount]);
          16     NSLog(@"s -----%p---%p",s,&s);
          17     NSString*st=[s copy];
          18     NSLog(@"st retainCount-----%D",[st retainCount]);
          19     NSLog(@"st -----%p---%p",st,&st);
          20     NSString*str=[s retain];
          21     NSLog(@"str retainCount-----%D",[str retainCount]);
          22     NSLog(@"str -----%p---%p",str,&str);

          retain 時是表示指向了同一個內存空間,只是內存空間的retainCount加了1,其他的都沒變,但是當copy時,如果那個內存單元里面的值是不可變的時候,我們跟retain是一樣的,只是內存空間的retainCount加了1!如果那個內存單元里面的值是可變的時候,其實在在內存中另外給分配了一塊內存空間,然后把值賦給內存空間里面。原來那個內存空間的retainCount不加1,現在新分配的內存空間retainCount1.

          posted @ 2010-12-11 15:24 雨 閱讀(366) | 評論 (0)編輯 收藏
          程序發布的時候會因為一些nslog影響速度,所以在程序release的時候盡量把nslog去除掉。
          在程序中加入以下代碼即可

          #ifndef __OPTIMIZE__

          #    define NSLog(...) NSLog(__VA_ARGS__)

          #else

          #    define NSLog(...) {}

          #endif

          posted @ 2010-12-08 15:12 雨 閱讀(237) | 評論 (0)編輯 收藏
          最近把xcode升級后發現加入settingbundle取出的defaultValue一直是nil
          一直找不到原因
          所以就用以下方法了,希望能對大家有幫助

          -(void)initvalue
          {
              NSString 
          *url=[[NSUserDefaults standardUserDefaults] objectForKey:kConnection];
              
          if (url==nil) {
                  NSString 
          *stringBundle=[[NSBundle mainBundle] bundlePath];
                  NSString 
          *settingBundle=[stringBundle stringByAppendingPathComponent:@"Settings.bundle"];
                  NSString
          *listBundle=[settingBundle stringByAppendingPathComponent:@"Root.plist"];
                  NSDictionary
          *rootDict=[NSDictionary dictionaryWithContentsOfFile:listBundle];
                  NSArray
          *array=[rootDict objectForKey:@"PreferenceSpecifiers"];
                  NSDictionary
          *preItem;
                  NSString
          *connection=nil;
                  
          for (preItem in array) {
                      NSString
          *key=[preItem objectForKey:@"Key"];
                      id defaultValue
          =[preItem objectForKey:@"DefaultValue"];
                      
          if ([key isEqualToString:@"connection"]) {
                          connection
          =@" http://www.baidu.com";
                      }

                  }

                  NSDictionary 
          *dictionary=[[NSDictionary alloc]initWithObjectsAndKeys:connection,@"connection",nil];
                  [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
                  [[NSUserDefaults standardUserDefaults] synchronize];
                  [dictionary release];
                  [stringBundle release];
                  [rootDict release];
                  [preItem release];
              }

          }
          這只是初始化Root.plist里的值,在這里我加入了一個PSTextFieldSpecifier,
          posted @ 2010-10-28 09:11 雨 閱讀(1062) | 評論 (0)編輯 收藏
          一點點積累吧,第一次寫blog
          最近在學習ASIHttpRequest
          先認識一下ASIHttpRequest
          如果要用到ASIHttpRequest先要向工程中加入CFNetwork.framework
          SystemConfiguration.framework, MobileCoreServices.framework, CoreGraphics.framework and libz.1.2.3.dylib
          然后再工程中加入所用到的包ASIHttpRequest
          接下來就可寫代碼了

          #import "TestAsiHttpreqeustViewController.h"
          #import 
          "ASIHTTPRequest.h"
          @implementation TestAsiHttpreqeustViewController


          -(void)viewDidLoad
          {
              ASIHTTPRequest
          *request=[ASIHTTPRequest requestWithURL:[NSURL URLWithString:@" http://172.16.20.14:8090/test.html"]];
              [request setDelegate:self];
              [request startSynchronous];
          }

          -(void)requestFinished:(ASIHTTPRequest *)request
          {
              NSString
          *responseString=[request responseString];
              NSLog(responseString);
          }

          這只是一個很簡單的ASIHttpRequest應用,我也在研究中,呵呵,希望對初學者有一點幫助
          posted @ 2010-10-26 10:26 雨 閱讀(336) | 評論 (0)編輯 收藏

           

          iphone中沒有現成的下拉菜單,所以我只能用代碼實現,寫了小例子:

          有一些對象沒有進行release,童鞋們可自己稍加改動

          /Files/linyu0324/Iphone/DropDown.zip
          posted @ 2010-10-22 16:14 雨 閱讀(194) | 評論 (0)編輯 收藏
          判斷當前設備:
          Ipad:

          #define isPad(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)

          Mac&Iphone&Ipod:

          #if TARGET_OS_IPHONE
          NSLog(
          @"iphone");
          #elif TARGET_OS_MAC
          NSLog(
          @"mac");
          #elif
          NSLog(
          @"other");
          #endif

          縮放圖片:

          -(UIImage *)scaleimage:(UIImage *)img size:(CGSize)c
          {
              UIGraphicsBeginImageContext(c);
              [img drawInRect:CGRectMake(
          00, c.width, c.height)];
              UIImage 
          *image=UIGraphicsGetImageFromCurrentImageContext();
              UIGraphicsEndImageContext();
              
          return image;
          }
          posted @ 2010-10-22 15:45 雨 閱讀(239) | 評論 (0)編輯 收藏
          <2010年10月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宁明县| 阿拉善盟| 阿克| 阳春市| 石台县| 榆中县| 乌兰浩特市| 鄂伦春自治旗| 红原县| 苏尼特左旗| 嵩明县| 囊谦县| 景宁| 北京市| 霍林郭勒市| 调兵山市| 手游| 贵港市| 庆阳市| 资中县| 鄢陵县| 正镶白旗| 顺平县| 岗巴县| 丰城市| 兴城市| 防城港市| 光山县| 临西县| 安龙县| 平和县| 左贡县| 曲水县| 静乐县| 封开县| 荃湾区| 南昌市| 乐昌市| 西安市| 景泰县| 滕州市|