ARC下AutoReleasePool的误区
全部标签 如果我阅读MikeAsh的"ZeroingWeakReferences"writeup是正确的,弱引用就像没有ARC的assign引用。但是,如果引用的对象被释放,而不是获得“悬空指针”(意味着指向释放对象的指针),指针被设置为nil。这是对的吗,标记为weak或assign的属性是否会发生这种情况(当ARC处于事件状态时)?如果这是正确的,这将消除很多SIGABRT。 最佳答案 这基本上是对的,但是assign属性仍然像以前一样被处理,只有weak属性被归零。另一个需要注意的是,弱引用归零仅在MacOSX≥10.7和iOS≥5中可
如果我阅读MikeAsh的"ZeroingWeakReferences"writeup是正确的,弱引用就像没有ARC的assign引用。但是,如果引用的对象被释放,而不是获得“悬空指针”(意味着指向释放对象的指针),指针被设置为nil。这是对的吗,标记为weak或assign的属性是否会发生这种情况(当ARC处于事件状态时)?如果这是正确的,这将消除很多SIGABRT。 最佳答案 这基本上是对的,但是assign属性仍然像以前一样被处理,只有weak属性被归零。另一个需要注意的是,弱引用归零仅在MacOSX≥10.7和iOS≥5中可
一个简单的问题。如果我有一个属性和一个用相同名称声明的ivar:在.h文件中:(Reminder*)reminder;@property(nonatomic,strong)(Reminder*)reminder;在.m文件中,如果我使用ARC,我应该使用ivar还是init方法中的属性?-(id)initWithReminder:(Reminder*)reminder_{self=[superinit];if(self){reminder=reminder_;}returnself;}或者我应该像这样使用该属性来获得自动引用计数的好处:-(id)initWithReminder:(Re
一个简单的问题。如果我有一个属性和一个用相同名称声明的ivar:在.h文件中:(Reminder*)reminder;@property(nonatomic,strong)(Reminder*)reminder;在.m文件中,如果我使用ARC,我应该使用ivar还是init方法中的属性?-(id)initWithReminder:(Reminder*)reminder_{self=[superinit];if(self){reminder=reminder_;}returnself;}或者我应该像这样使用该属性来获得自动引用计数的好处:-(id)initWithReminder:(Re
我需要在NSArray中存储对对象的弱引用,以防止保留循环。我不确定要使用的正确语法。这是正确的方法吗?Foo*foo1=[[Fooalloc]init];Foo*foo2=[[Fooalloc]init];__unsafe_unretainedFoo*weakFoo1=foo1;__unsafe_unretainedFoo*weakFoo2=foo2;NSArray*someArray=[NSArrayarrayWithObjects:weakFoo1,weakFoo2,nil];请注意,我需要支持iOS4.x,因此使用__unsafe_unretained而不是__weak。编辑(
我需要在NSArray中存储对对象的弱引用,以防止保留循环。我不确定要使用的正确语法。这是正确的方法吗?Foo*foo1=[[Fooalloc]init];Foo*foo2=[[Fooalloc]init];__unsafe_unretainedFoo*weakFoo1=foo1;__unsafe_unretainedFoo*weakFoo2=foo2;NSArray*someArray=[NSArrayarrayWithObjects:weakFoo1,weakFoo2,nil];请注意,我需要支持iOS4.x,因此使用__unsafe_unretained而不是__weak。编辑(
只是想确保我做对了:我是否需要__unsafe_unretain我不拥有的对象?如果一个对象是__unsafe_unretained我需要在@property中使用assign吗?这是否意味着该对象没有被保留,而只是引用我分配给的对象?除了代表,我还想在什么时候使用它?这是ARC的东西还是以前使用过? 最佳答案 LLVMCompiler3.0引入了四个新的所有权限定符:__strong、__autoreleasing、__unsafe_unretained和__weak。根据thespecification,前三个甚至在ARC之外也
只是想确保我做对了:我是否需要__unsafe_unretain我不拥有的对象?如果一个对象是__unsafe_unretained我需要在@property中使用assign吗?这是否意味着该对象没有被保留,而只是引用我分配给的对象?除了代表,我还想在什么时候使用它?这是ARC的东西还是以前使用过? 最佳答案 LLVMCompiler3.0引入了四个新的所有权限定符:__strong、__autoreleasing、__unsafe_unretained和__weak。根据thespecification,前三个甚至在ARC之外也
ARC禁止在结构或联合中使用Objective-C对象,尽管标记了文件-fno-objc-arc?为什么会这样?我假设如果你标记它-fno-objc-arc你没有这个限制。 最佳答案 如果您收到此消息,请尝试__unsafe_unretained。只有在结构中的对象未被保留时,它才是安全的。示例:如果您将OpenFeint与ARC一起使用,则OFBragDelegateStrings类会在结构中显示此错误。typedefstructOFBragDelegateStrings{NSString*prepopulatedText;NSS
ARC禁止在结构或联合中使用Objective-C对象,尽管标记了文件-fno-objc-arc?为什么会这样?我假设如果你标记它-fno-objc-arc你没有这个限制。 最佳答案 如果您收到此消息,请尝试__unsafe_unretained。只有在结构中的对象未被保留时,它才是安全的。示例:如果您将OpenFeint与ARC一起使用,则OFBragDelegateStrings类会在结构中显示此错误。typedefstructOFBragDelegateStrings{NSString*prepopulatedText;NSS