Objective-C のプリミティブ プロパティで属性を使用する必要があることはよく知られています(assign)
が、なぜこれを行うのかについて明確な説明はありませんでした。
検討
[myObject setIntProperty:22];
myObject
を持つクラスの場合@property (nonatomic, assign) int intProperty;
私の想像intProperty
では、値 22 を保持するスタック メモリへのポインタを割り当てることになると思います。したがって、そのポインタはプロパティが値を持つために生き続けなければならないので、これはすべてのプリミティブがスタック メモリ内で無制限の寿命を持つことを意味しますか?
私が理解していないことを説明するためのいくつかのコード:
MyObject.h ----
@interface MyObject : NSObject
@property (nonatomic, assign) int myInt;
@property (nonatomic, assign) NSString* myString;
@end
その他のファイル.m ----
-(void) doSomething
{
int x = 22;
NSString* str = @"something";
MyObject* obj = [[MyObject alloc] init];
obj.myInt = x;
obj.myString = str;
[self doSomethingInOtherFunctionWith:obj];
}
関数が完了して先に進むと、割り当てられた文字列myStringは、関数の実行後に破棄されるdoSomething
関数のローカルとポインターを共有しているため、何も指しません。str,
しかし、myInt は 22 のままです。
私は、これが値によって渡される仕組みであることを理解しています。どのように機能するのかは疑問ではありません。理由だけです。int は、あるレベルでポインターである必要はありませんか?