相关疑难解决方法(0)

为什么Objective-C代理通常给予属性赋值而不是保留?

我正在浏览Scott Stevenson维护的精彩博客,我正在尝试理解一个基本的Objective-C概念,即为委托者分配'assign'属性vs'retain'.注意,两者在垃圾收集环境中是相同的.我主要关注的是非基于GC的环境(例如:iPhone).

直接来自Scott的博客:

"assign关键字将生成一个setter,它直接将值赋给实例变量,而不是复制或保留它.这最适用于NSInteger和CGFloat等原始类型,或者你不直接拥有的对象,如委托."

你不直接拥有委​​托对象是什么意思?我通常会保留我的代表,因为如果我不希望他们离开深渊,保留将为我照顾.我通常抽象UITableViewController远离其各自的dataSource和委托.我也保留那个特定的对象.我想确保它永远不会消失,所以我的UITableView总是有它的代表.

有人可以进一步解释我错在哪里/为什么,所以我可以理解Objective-C 2.0编程中使用委托上的assign属性而不是retain的常见范例吗?

谢谢!

cocoa delegates objective-c ios

176
推荐指数
3
解决办法
5万
查看次数

self.delegate respondsToSelector:...不编译

我已经实现了一个协议,一个可选的方法和调用方法我想发respondsToSelector:self.delegate之前,我发送消息,但是,这并不编译.失败消息是:

没有已知的选择器'respondsToSelector'的实例方法.

作为解决方案,我"清理"了如下所示的代表,它编译了...

//MyClass.h:

@class MyClass;

@Protocol MyClassDelegate
- (void)myClass:(MyClass *)sender willDoSomething:(BOOL)animated;
@end

@interface MyClass : UIViewController

@property (nonatomic, weak) id<MyClassDelegate> delegate;

@end
Run Code Online (Sandbox Code Playgroud)

//MyClass.m:

...
@synthesize delegate = _delegate;
...

id sanitizedDelegate = self.delegate; //Hmmmm... why does this work?

if ([sanitizedDelegate respondsToSelector:@selector(myClass:willDoSomething:)]) {
    [self.delegate myClass:self willDoSomething:animated];
}
Run Code Online (Sandbox Code Playgroud)

.

我检查了一些帖子,包括这个,但它没有回答编译失败问题.

此外,替代访问器不起作用......

[self delegate]
//or
_delegate
Run Code Online (Sandbox Code Playgroud)

有没有人看过这个或者可以建议更好的处理方式?

IOS 5.0:(9A334),Xcode 4.2.1(4D502)

xcode ios5

33
推荐指数
2
解决办法
2万
查看次数

从未知类(id)对象获取文本的较短方式

我有一个由对象组成的字典UITextfield,UITextView并且UILabel它们都具有text属性.现在我需要在不使用丑陋方法的情况下实现这一点,这也是我目前的代码:

NSString *text = @"";

if ( [obj isKindOfClass:[UITextView class]] ) {
    text = [(UITextView *)obj text];
}
else if ( [obj isKindOfClass:[UITextField class]] ) {
    text = [(UITextField *)obj text];
}
else if ( [obj isKindOfClass:[UILabel class]] ) {
    text = [(UILabel *)obj text];
}

[array addObject:text];
Run Code Online (Sandbox Code Playgroud)

有没有办法缩短它?

text objective-c uitextfield uitextview ios

1
推荐指数
1
解决办法
95
查看次数

标签 统计

ios ×2

objective-c ×2

cocoa ×1

delegates ×1

ios5 ×1

text ×1

uitextfield ×1

uitextview ×1

xcode ×1