16.NSArray属性可以这样用
NSArray的属性可以这样用哦 :
@property(copy) NSArray *sublayers;
NSLog(@"star- :%@", self.view.layer.sublayers[2]);
直接指定具体的哪个,必须的嘛,本来就是数组来的。
17.extern 关键字
初学的时候特别不能理解为什么要有extern关键字,有一个全局的不就够了吗
有了通知和三方SDK的接入知识现在懂了,例如通知中:
extern NSString* const kXYPlatformInitDidFinishedNotification; //初始化成功
这种通知整个程序的时候就需要添加上extern关键字
18.程序的健壮性
//判断_delegate实例是否实现了onClick:方法(注意方法名是"onClick:",后面有个:)
//避免未实现ButtonDelegate的类也作为KCButton的监听
if([_delegate respondsToSelector:@selector(onClick:)]){
[_delegate onClick:self];
}
常常会把button的点击方法写成这样:
- (IBAction)backBtnFun:(id)sender
{
/** 省略 **/
if ([sender isKindOfClass:[NSDictionary class]] && !_isWalletPay){
NSDictionary *dic = sender;
[[NSNotificationCenter defaultCenter] postNotificationName:PAYCALLBACK_NOTIFICATION object:dic];
}
/** 省略 **/
}
然后发现上面的判断为什么将sender和字典联系起来了,问了伟才知道: “有其他方式调用这个方法啊!” 原来是对iOS的事件机制不熟悉! 找个时间要补一下!
有一种例子就是调用银联后取消订单,会跳回充值页面,这个时候sender就是一个字典类型,就是上面的代码的例子。
例子:
[self backBtnFun:dic];
20.framrwork的导入用 < >
搞了半天,LibTest路径,SQGame路径,LibTest的build phases 和工程添加都添加上去了但是还读不到,原来我昏,framework都是用<> ,而不是系统才用。
21. NSString 初始化的值 : @““ ( @” “ ) 和NULL区别
NSString* uin = @"";
并不等于:
NSString* uin = NULL;
如果要装进容器类的话,后面这句就惨了。
22. 静态库.a 的路径设置
23. 事件中的参数的使用
思维太死啦,实质上是对iOS事件的不熟悉,找时间一定要补上
- (void)voiceBtnPress:(UIButton*)voiceButton
{
NSString* normal = NULL;
NSString* hightLight = NULL;
if (self.speakButton.hidden == YES)
{
self.speakButton.hidden = NO;
self.textFiled.hidden = YES;
normal = @"chat_bottom_keyboard_nor.png";
hightLight = @"chat_bottom_keyboard_press.png";
}
else
{
self.speakButton.hidden = YES;
self.textFiled.hidden = NO;
normal = @"chat_bottom_voice_nor.png";
hightLight = @"chat_bottom_voice_press.png";
}
[voiceButton setImage:[UIImage imageNamed:normal] forState:UIControlStateNormal];
[voiceButton setImage:[UIImage imageNamed:hightLight] forState:UIControlStateHighlighted];
}
如果是以前,这两句我一定会用属性来写:
[voiceButton setImage:[UIImage imageNamed:normal] forState:UIControlStateNormal];
[voiceButton setImage:[UIImage imageNamed:hightLight] forState:UIControlStateHighlighted];
但是其实,按钮事件的参数,例如(id)sender ,这里的sender不就是我们用的button嘛。。直接拿参数来做操作就行了!
24. CGRectValue
我们都知道intValue IntgerValue ,很少见到CGRectValue,在键盘通知事件中,就可以见到CGRectValue了
CGRect keyBoardRect = [noti.userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue];
25. 视图的平移操作
以前的我视图操作总是用setFrame直接来控制的,很low而且效果不好,其实直接用:
self.view.transform = CGAffineTransformMakeTranslation(0, -deltaY);
往往伴随着动画而且效果好!
想恢复原样就:
self.view.transform = CGAffineTransformIdentity;
26.枚举类型可以作为变量
typedef enum {
kMessageFrom = 0,
kMessageTo
} ChartMessageType;
@property (nonatomic,assign) ChartMessageType messageType;
typedef NS_ENUM(NSInteger, UITextBorderStyle) {
UITextBorderStyleNone,
UITextBorderStyleLine,
UITextBorderStyleBezel,
UITextBorderStyleRoundedRect
};
@property(nonatomic) UITextBorderStyle borderStyle;
所以我们在实际中,可以大胆使用!
27.protocol 的 class
在声明协议的时候我们经常要用到别的类,这个时候我们不用#import 而是用 @class
@class ChartContentView,ChartMessage;
28.某些方法名字的处理
- (void)initwithData; 有没有观察到with这个字幕是小写,如果是类内部作为初始化数据,简单布局UI为了避免是作为“初始化族”的一员而不使用大写W。