3

私はiOSプログラミングが初めてです。次のコード行の正確な意味を誰か教えてもらえますか @property(**nonatomic, retain**) UIView *singleTapView;

私は実際に関数の正確な意味を知らずに@propertyを何度も使用してきました(nonatomic, retain or assign or copy)..誰でもこれで私を助けてくれます..ありがとう

4

5 に答える 5

9

これは、もっと頻繁に提起されるべき問題です。

@property単純なプロパティ宣言です。ここには新しいものはありません。


nonatomic@synthesizeこれは、対応するアクセサーに対してオブジェクト ロックが実装されておらず、プロパティが直接提供されていることを意味します。これは よりも高速ですがatomic、マルチスレッドの使用例では部分的に値が書き込まれるなどの結果になる可能性があります。

デフォルト ( atomic) を使用する場合、@syntheized メソッドはオブジェクト レベルのロックを使用して、プロパティへの複数の読み取り/書き込みが確実にシリアル化されるようにします。Apple docsが指摘しているように、これはオブジェクト全体がスレッドセーフであることを意味するわけではありませんが、プロパティの読み取り/書き込みはスレッドセーフです。

独自のアクセサ メソッドを記述しても、これは何もしません。しかし、ほとんどのプログラマーはとにかくそれを書きます。


保持することは少し簡単です。基本的に、それはあなたが使用するオブジェクトが欲しいことを意味します

alloc-> init-> retain->release

物事を行うサイクル。基本的に、ブール値や整数などのプリミティブ以外のすべてに使用します。

于 2011-03-01T11:29:21.240 に答える
4

iOSでは、プロパティは、通常作成するgetterメソッドとsetterメソッドを置き換えるために使用されます。

コード行:

@property(nonatomic、retain)UIView * singleTapView;

UIViewのgetterメソッドとsetterメソッドを記述していることを意味します。

また、コード内のどこかでUIViewを使用するたびに、UIViewの保持カウントを自動的に保持またはインクリメントします。

ただし、使用する場合:

@property(nonatomic、assign)UIView * singleTapView;

その後、UIViewを使用すると、保持カウントは増加しません。これは、UIViewを保持しないことを意味します。

また、「コピー」は、現在のオブジェクトの値を新しいオブジェクトに与えるために使用されます。

于 2011-03-01T11:33:30.053 に答える
4

The Objective C Programming LanguageのDeclared Propertiesの章を読む必要があります。

于 2011-03-01T11:19:39.057 に答える
1

非アトミック/アトミック部分については、アトミック操作を読む必要があります。iOSに固有のものではありませんが、理解を深めるのに役立ちます

保持部分については、このコードが役立ちます。@synthesizeが生成するものと似ています

//getter
- (Book *)book
{
    return [[book retain] autorelease];
}

//setter
- (void)setBook:(Book *)aBook
{
    if (book == aBook)
    {
        return;
    }
    Book *oldBook = book;
    book = [aBook retain];
    [oldBook release];
}
于 2013-10-14T11:44:07.813 に答える
1

@property を宣言すると、その特定の変数の getter および setter メソッドが暗黙的に作成されます....

そのゲッターとセッターがどのように機能するかは、 @property を宣言する方法によって異なります

例えば

@property(nonatomic,retain) 保持カウントが増加し、変数がスレッドセーフにならないセッターメソッドを作成します...

入力するたびself.variableNameに、によって作成されるセッターメソッドが呼び出されます@property

于 2011-03-01T11:25:14.600 に答える