2

私は次のように宣言された NSString を持っています:

.h:

@interface ViewController : UIViewController

{

        NSString * aString;

}
@property(nonatomic,copy)NSString *aString;

.m :

@synthesize aString;

......

aString=[[NSString alloc]init];
aString=@"Hello World";

NSLog(@"%@",aString);//The app crashes here

このスタック トレースでアプリがクラッシュします。

-[CFString respondsToSelector:]: message sent to deallocated instance
4

1 に答える 1

8

次の行を削除します。

aString=[[NSString alloc]init];

プロパティに値を設定します。

self.aString=@"Hello World";

実行:aString=@"Hello World";プロパティのアクセサ メソッドを使用せずに、インスタンス変数に値を設定していることを意味します。その後、メモリ管理を担当し、より複雑になります。次の方法で値を取得しますself.aString
PS常にプロパティを使用して機能し、インスタンス変数を使用することはほとんどありません(deallocメソッドでのみivarを解放します。そうしないと、メモリ管理が苦手な場合は常に問題が発生しますが、プロパティがすべてを行います)

于 2012-06-15T08:49:30.680 に答える