第一篇文章。对不起,如果我搞砸了代码规则。我正在尝试从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对象不被释放是不够的呢?最后,我想我仍然对分配在引用计数方面的作用与强大的内容(或者我应该说保留,因为这是ARC中的强大替代)感到困惑。
答案 0 :(得分:1)
strong == to std :: shared_ptr如果你来自C ++
强烈声明在分配期间必须分别保留和释放对象。
-(void)assign:(id) b to:(id) a {
if( b ){
[b retain];
}
if ( a ){
[a release];
}
a = b;
}
要回答第二个问题,Objective-C对象的大小不像结构那样定义。因此,obj-C类不能按价值持有。
因此,编译为obj-c的obj-c类中的所有数据将始终具有存储在其中的普通旧数据类型,因为它们的大小可以确定为固定的。
考虑一个8字节的缓冲区;
前4个字节用于你的int,第二个4个字节是你的指针,因为有一个可变长度的字符串会在运行时改变对象的大小,你会看到它不起作用,一个字符串被分配在堆并分配给您的指针。