注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云水禅心

淡若秋菊何妨瘦, 清到梅花不畏寒.

 
 
 

日志

 
 

error: expected a property attribute before 'strong'  

2011-11-29 17:29:32|  分类: iphone |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
备注:今天用最新的 myLauncher (https://github.com/Jarada/myLauncher)代码时发现 里面用了stong 在xcode4.1时编译不通过
用xcode4.2 打开项目是直接提示 error: expected a property attribute before 'strong'   把strong 换成retain 就可以,折腾了好一会,最终用下面的方法得以解决即   在 Build Settings 裡,把 Compiler 改成 Apple LLVM compiler 3.0 就可以了



iOS5 新的 Automatic Reference Counter 語法   http://www.richiestyle.org/archives/351


iOS5 在 2011 WWDC 宣佈
主要重點為 iCloud, iOS 5 及 Lion
其中對 iOS 的開發者來說,除了新的 API 之外 (如 iCloud API)
最重要的改變大概就是 Automatic Reference Counter 及 Storyboard 吧
尤其是 Automatic Reference Counter
可以讓開發者免去 retain/release/autorelease/dealloc 的動作,減少 leak 的產生
對初學者來說,也可減少學習 reference count 的困擾
雖然它和 Java 的 garbage collection 很像
目的都是在減少使用者出錯,幫忙做記憶體管理的動作
但其實作法是不相同的
Java 是在 runtime 時做資源回收的動作,發現有不需要用到的記憶體空間即自動回收
而 iOS5 則是在 compiler 時就幫使用者加上 release 的動作
並非等到真正執行時才在背後執行資源回收的機制

新的 XCode 4.2 (iOS5 beta) 同時支援新舊機制,你舊專案無需更改也可以 compile
所以如果你的專案已完成,可以不用理它
但如果你的舊專案也想有這項方便的機制,就必須一些修改
建議無論如何還是學習一下
因為新版的 XCode 預設的 template 已經是使用新的語法了

變更設定以支援 Automatic Reference Counter

首先在 Build Settings 裡,必須把 Compiler 改成 Apple LLVM compiler 3.0

然後 Automatic Reference Counting 旗標也必須打開

這時候 compile 應該會產生一堆錯誤了,不用擔心
因為當設定 Automatic Reference Counting 之後,就不支援舊的語法
像是 retain/release/autorelease/dealloc 之類的語法全部都會錯誤
必須全部清除這些程式碼

首先開始修改 NSAutoreleasePool

通常這會出現在幾個地方,一個是 main.m 裡
另外就是在 Thread 裡出現 (如果你的程式有用到的話)
我們必須把 main.m 改成以下
用 autoreleasepool 語法來取代原本的 NSAutoreleasePool

1
2
3
4
5
6
7
8
9
10
11
#import "xxxAppDelegate.h"
 
int main(int argc, char *argv[])
{
    int retVal = 0;
    @autoreleasepool
    {
        retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([xxxAppDelegate class]));
    }
    return retVal;
}

開始修改程式碼了

@property (nonatomic, retain) 請改為 @property (strong, nonatomic)

1
2
3
@property (nonatomic, retain) NSString *str;
// 請改成
@property (strong, nonatomic) NSString *str;

接下來就沒有捷徑了,就是把所有的 retain/release/autorelease/dealloc 全部找出來 mark 掉
最快的方法就是搜尋 dealloc 函式直接刪掉它,就可以省掉一堆錯誤訊息了
接下來就一邊 compile 一邊除錯
讓 compiler 幫你找出所有使用到舊語法的程式碼,一個一個修正它
修正完成後
你再也不需要擔心忘記 release 任何變數了,因為新的 compiler 都會幫你處理好好的了

  评论这张
 
阅读(3437)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018