1

最初の投稿。コード規則を台無しにして申し訳ありません。Big Nerd Ranch Guide から Objective C を学ぼうとしています。強い参照を扱う例を投稿します。

#import <Foundation/Foundation.h>

@interface Asset : NSObject
{
  NSSTRING *label;
  unsigned int resaleValue;
}
@property (strong) NSString *label;
@property unsigned int resaleValue;
@end

したがって、基本的に NSString には強力な参照が必要ですが、int には必要ありません。私は NSString がオブジェクトであることを認識しており、何も指定されていない場合、変数には割り当てのプロパティが与えられることを読みました。

では、割り当てが int のようなものを所有するオブジェクトが解放されるまで解放されないようにするのに十分である場合、Asset オブジェクト内の NSString オブジェクトが解放されないようにするのに十分ではないのはなぜでしょうか? 最終的には、参照カウントに関して assign が何をするのか、strong が何をするのかについて、まだ混乱していると思います (または、それが ARC でストロングに置き換えられたので、保持と言うべきかもしれません)。

4

1 に答える 1

1

C++ から来た場合は、std::shared_ptr への strong ==

割り当て中にオブジェクトをそれぞれ保持および解放する必要があることを示しています。

-(void)assign:(id) b to:(id) a {
    if( b ){
      [b retain];
    }
    if ( a ){
      [a release];
    }
    a = b;

}

2 番目の質問に答えるために、Objective-C オブジェクトのサイズは構造体のように定義されていません。したがって、obj-C クラスは値によって保持できません。

したがって、obj-c としてコンパイルされた obj-c クラス内のすべてのデータは、そのサイズが固定されていると判断できるため、常に単純な古いデータ型が格納されます。

8 バイトのバッファーを考えてみましょう。

最初の 4 バイトは int 用です。2 番目の 4 バイトはポインタです。可変長の文字列を使用すると実行時にオブジェクトのサイズが変わるため、これがどのように機能しないかがわかります。文字列はヒープに割り当てられ、割り当てられます。あなたのポインタに。

于 2012-04-24T05:16:39.320 に答える