作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的viewDidLoad()
中,将我的属性设置为self.textToAnalyze
会导致property
在调试器中为nil
,而直接使用_textToAnalyze
设置该属性则表明该属性不再为nil。为什么是这样?
//
// TextStatsViewController.m
// colorSwitcher
#import "TextStatsViewController.h"
@interface TextStatsViewController ()
@property (weak, nonatomic) IBOutlet UILabel *colorfulCharactersLabel;
@property (weak, nonatomic) IBOutlet UILabel *outlinedCharactersLabel;
@end
@implementation TextStatsViewController
-(void)setTextToAnalyze:(NSAttributedString *)textToAnalyze
{
}
-(void)viewDidLoad
{
_textToAnalyze=[[NSAttributedString alloc] initWithString:@"test" attributes:@{NSForegroundColorAttributeName : [UIColor greenColor],NSStrokeWidthAttributeName :@-3}]; //setting it here with the underscore shows that this property is not nil in the debugger
//self.textToAnalyze=[[NSAttributedString alloc] initWithString:@"test" attributes:@{NSForegroundColorAttributeName : [UIColor greenColor],NSStrokeWidthAttributeName :@-3}]; //setting it here with the accessor shows that this property is nil in the debugger
}
-(void)updateUI
{
self.colorfulCharactersLabel.text =[NSString stringWithFormat:@"%d colorful characters",[[self charactersWithAttribute:NSForegroundColorAttributeName] length]];
self.outlinedCharactersLabel.text =[NSString stringWithFormat:@"%d outlined characters",[[self charactersWithAttribute:NSStrokeWidthAttributeName] length]];
}
-(NSAttributedString *)charactersWithAttribute:(NSString *)attributeName
{
int index=0;
NSMutableAttributedString* characters=[[NSMutableAttributedString alloc] init];
while(index < [self.textToAnalyze length])
{
NSRange range;
id value = [self.textToAnalyze attribute:attributeName atIndex:index effectiveRange:&range];
if(value)
{
[characters appendAttributedString:[self.textToAnalyze attributedSubstringFromRange:range]];
index=range.location+range.length;
}else{
index++;
}
}
return characters;
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self updateUI];
}
@end
//
// TextStatsViewController.h
// colorSwitcher
#import <UIKit/UIKit.h>
@interface TextStatsViewController : UIViewController
@property (nonatomic,strong)NSAttributedString* textToAnalyze;
@end
最佳答案
因为您有一个空的塞特犬。
-(void)setTextToAnalyze:(NSAttributedString *)textToAnalyze
{
}
self.textToAnalyze = something
时与执行
[self setTextToAnalyze:something]
相同,因此永远不会设置实例变量。
-(void)setTextToAnalyze:(NSAttributedString *)textToAnalyze
{
_textToAnalyze = textToAnalyze;
}
textToAnalyze
声明为@property:
@property (nonatomic) NSAttributedString *textToAnalyze;
关于ios - 为什么使用self.propertyname而不是_propertyname设置我的属性为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888784/
我理解两者之间的区别:self.propertyName 使用访问器方法,而 _propertyName 直接访问实例变量。因此,据我了解,唯一您不想使用self.propertyName 的时间是在
我是一名优秀的程序员,十分优秀!