众所周知,我们应该(assign)
在 Objective-C 中的原始属性上使用属性,但我从来没有明确解释过为什么要这样做。
考虑
[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];
}
现在,一旦doSomething
函数完成并继续前进,分配的字符串 myString 现在指向任何内容,因为它与函数的本地共享一个指针,该指针str,
在函数运行后被销毁。但 myInt 仍为 22。
我知道这是它的工作方式,通过值传递,我不质疑它是如何工作的,只是为什么。int 不是必须是某个级别的指针吗?