编程细节 - 2

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。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值