13
A
回答
22
@property (getter=yourGetter,setter=yourSetter:) UIButton *but;
0
实施
- (void)setBut:(UIButton *)aButton;
它也许应该看起来像
- (void)setBut:(UIButton *)aButton {
[but release];
but = [aButton retain];
// whatever
}
23
@Sascha几乎是正确的,但他的代码中有一个微小的错误;)
它看起来像是:
A)
-(void)setBut:(UIButton *)value {
if (but != value) {
[but release];
but = [value retain];
}
}
或B)
-(void)setBut:(UIButton *)value {
[but autorelease];
but = [value retain];
}
(A)是(非常)稍微更有效,(B)是更具有可读性。
为什么我们需要在选项(A)的if语句,而不是仅仅释放&保留@萨沙的回答?
如果您传入同一对象两次会发生什么?
即
// We set our button for the first time
UIButton *test = [UIButton alloc] init];
[self setBut:test];
[test release];
// Much later in the code, we set the button again
[self setBut:test];
如果我们没有检查but
不是一个不同的对象,我们将在我们的二传手做的第一件事就是release
它。然后我们会尝试retain
一个不存在的对象,导致崩溃。
注意我们并不需要选项(B)中的if语句,因为autorelease不会立即释放按钮,所以我们有时间在不释放按钮的情况下再次保留它。
1
A B +)替代deanWombourne的解决方案:
-(void)setBut:(UIButton *)value {
[value retain]
[but release];
but = value;
}
该解决方案将防止出现问题,其中值是但一个子对象。
的A +)替代deanWombourne的解决方案:
-(void)setBut:(UIButton *)value {
if (but != value) {
[value retain]
//insert here but's cancel, invalidate, delegate = nil, ...
[but release];
but = value;
}
}
该解决方案将防止出现问题,其中值是但一个子对象。 它可以让你添加一个NSURLConnection的cancel
,一个NSTimer或NSPort的invalidate
,一个委托为零,...
0
我相信这是@synthesised制定者如何做到这一点,它适用于所有情况,无论您分配相同的对象与否:
- (void)setBut: (UIButton*)aButton
{
id oldObject = but;
but = [aButton retain];
[oldObject release];
}
不能出错,只要我能看到。
相关问题
- 1. Property Observer vs自制setter
- 2. javax.persistence PROPERTY访问自定义getter/setter名称
- 3. spring @Autowire property vs setter
- 4. @property setter中的泄漏
- 5. python @property setter代表团
- 6. @property,setter和getter问题?
- 7. Objective-C的自定义的getter/setter
- 8. 可可绑定:自定义setter方法?
- 9. swift @property指令:自定义访问器
- 10. 自定义帖子类型“property”(wp-property plugin)查询问题
- 11. 生成自定义的Java Getters和Setter
- 12. 类别中的自定义NSManagedObject setter
- 13. Laravel中的自定义setter和getters
- 14. Realm对象的自定义setter/willSet
- 15. assign @ property的setter是如何实现的?
- 16. 续集,自定义setter,没有设置
- 17. DataBinding Android,自定义setter,不工作?
- 18. scala Ide自定义setter错误
- 19. 使用自定义setter或KVO
- 20. 定义与自定义名称有关的多个setter方法
- 21. 如何为自定义小部件定义自定义getter和setter? - Dojo
- 22. 定制的setter/getter方法@property Objective-C的
- 23. 如果没有定义setter或deleter,为什么有人会使用@property?
- 24. 在协议中定义@property
- 25. 覆盖@property setter和无限循环
- 26. 在定制getter和setter方法时使用@property
- 27. 自定义类和@property的奇怪东西int的
- 28. 推进自定义Setter与SQL特定的东西
- 29. 获取表达式的自定义对象<model,property>
- 30. 获取自定义类调解器中Property的值
另请注意,正如Sascha指出的那样,如果您提供自定义setter,则需要您自行释放/保留参考。 – devios1
请注意,自定义getter和setter与普通SELECTOR类似,因此yourSetter:必须有尾部冒号 – onmyway133