编程细节 - 1
来源:互联网 发布:透镜设计软件 编辑:程序博客网 时间:2024/06/17 21:11
1.换了图片之后发现不是自己想要的!!
— 查看Images.xcassets 有没有遗留旧图
关于:Images.xcassets详解:
转自: http://blog.csdn.net/yongyinmg/article/details/23845319
2.时间换算后发现输出为空
— 有可能会是格式不对哦
- (NSString*)GetCurTime{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss:SSS"];<span style="color:#ff0000;">// 这里改成: yyyy-MM-dd HH:mm:ss 就可以去得到时间差啦!</span> NSString*timeString=[formatter stringFromDate: [NSDate date]]; [formatter release]; return timeString;}
3.直接从服务器拿数字,例如设置Label值等
— 注意哦,添加个intValue、integerValue,转成NSNumber等操作
[cell.moneyLabelsetText:[NSStringstringWithFormat:@"%@", [[self.payPaidRecord.publicArrayobjectAtIndex:indexPath.row]objectForKey:@"money"]]];添加个[NSString stringWithFormat:]方法来做约束,这里有趣的是,从服务器拿的数据看起来是数字,但是方法用的是%@,讨论一番后,认为是系统自动转成NSNumber类型。
4.存取方法的有趣:
@property (nonatomic,copy) NSString *source;
- (NSString*)source{ return [NSString stringWithFormat:@"来自%@", _source];}当重写get方法的时候,很奇怪的一点就是_source自动加了一个下划线,直觉告诉我是不是因为要区别函数名? 等有时间去StackOverflow解决它吧!
5.iOS中的private:
记得做面试题目的时候见过一题,OC中有私有变量吗?
嘿嘿,在autolayout的学习中,见到了OC的private变量:
NS_CLASS_AVAILABLE_IOS(6_0)@interface NSLayoutConstraint : NSObject{ @private id _container; id _firstItem; id _secondItem; CGFloat _constant; CGFloat _loweredConstant; id _markerAndPositiveExtraVar; id _negativeExtraVar; float _coefficient; UILayoutPriority _priority; uint64_t _layoutConstraintFlags; id _flange;}
千真万确是有private变量的,但是其中文章很多,例如:
为什么会报这个错误,哎呀,怨自己当时C/C++不好好学,回头解决吧!但是直观的就是因为私有变量自己才能用呗,所以赋给它就不行啦。但是我试着:
这样也不行,所以,肯定要后续慢慢解决掉这些问题!
6.数据不能写死啊:
37的SDK作为中间层传数据给渠道的SDK的时候,要用单例生成或者接口传数据,而不是写死!!!
7.优雅:
如果平常的时候我们会用10,-10 , 但引入UIEdgeInsets变量时候既可以形象地表示四周的边距也可以用作数据
UIView *superview = self;UIView *view1 = [[UIView alloc] init];view1.translatesAutoresizingMaskIntoConstraints = NO;view1.backgroundColor = [UIColor greenColor];[superview addSubview:view1];UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);[superview addConstraints:@[ //view1 constraints [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:padding.top], [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeLeft multiplier:1.0 constant:padding.left], [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-padding.bottom], [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeRight multiplier:1 constant:-padding.right], ]];
8.让世界更清爽的写法 - NSArray NSMutableArray NSDictionary NSMutableDictionary NSNumber
参考:http://www.tuicool.com/articles/iaaeqi
提一提其中一点,更新NSMutableArray的简便:
LLVM4.0以前的更新数据方式如下:
NSMutableArray *oldMutable = [NSMutableArray arrayWithArray: old];[mutable replaceObjectAtIndex:1 withObject:@"disposed"];LLVM4.0以后:
NSMutableArray *newMutable = [NSMutableArray alloc] init];newMutable[2] = @ " myObject " ;就是更迈向C和java罢了!
9.函数还能这么写这么用
[button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];我们都知道button点击的@selectoer函数这么写,而传参的时候addTarget:action:forControlEvents:这个方法会自动地传入参数:
如下面的:(id)sender ,也可以直接打印这个sender来验证
- (void)buttonClicked:(id)sender { [UIView beginAnimations:@"ShowHideView" context:nil]; //这里context:nil,值得思考 [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; [UIView setAnimationDuration:1.0]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)]; self.firstView.alpha = 0.0; [UIView commitAnimations]; }
现在有趣的这个buttonClicked里面的一个方法:
[UIView setAnimationDidStopSelector:@selector(showHideDidStop:finished:context:)];这个是一个多参数的,我们可以理解上面的单参的情况,你编译器很好处理,我们看看具体如何实现:
- (void)showHideDidStop:(NSString*)animtaionID finished:(NSNumber*)finished context:(void*)context { [UIView beginAnimations:@"ShowHideView2" context:nil]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; [UIView setAnimationDuration:1.0]; [UIView setAnimationDelay:1.0]; self.firstView.alpha = 1.0; [UIView commitAnimations]; }和buttonClicked:有一点一样就是仍然没有使用到方法所赋的参数,就好像各玩各一样,方法里面自己做处理不管多少个参数和参数的意义。
这里能不能理解为编译器也做了处理,自己赋了参数,但是如此理解,有没有一个格式和参数数量,参数类型咧。有待日后验证哦。
其实只要弄懂点击事件的(id)sender参数的机制和原理就OK了。
10.当可以使用参数的时候,直接了当!
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ NSLog(@"UIViewController will rotate to Orientation: %ld", self.interfaceOrientation);}完全可以这样写:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ NSLog(@"UIViewController will rotate to Orientation: %ld", toInterfaceOrientation);}
11.扩展
#import "LBCGTransformController.h"@interface LBCGTransformController ()@property (nonatomic, strong) UIButton* headImageView;@end@implementation LBCGTransformController@end上面的添加 圆括号 后叫做私有扩展。
之所以叫私有扩展是有其意义的,这样定义的属性,是私有的,无法点取的。
12.缩进格式
什么都不做的时候的格式:
CGPathAddCurveToPoint(thePath, NULL, 320.0, 500.0, 566.0, 500.0, 566.0, 74.0);
适当编排:
CGPathAddCurveToPoint(thePath, NULL, 74.0, 500.0, 320.0, 500.0, 320.0, 74.0);多好看!
13.readonly 和 const
下面注意到readonly 和 const
#pragma mark - SelectionObject@interface SelectionObject : NSObject<NSCopying>@property(nonatomic, readonly)BOOL selected;@property(nonatomic, readonly)uint32_t section;- (id)initWithSection:(const uint32_t)section andSelected:(BOOL)selected;@end
14.init family
有一次重写init方法爆出来了一个奇怪问题,一看:
嘻嘻, 细心一看吧,就是initwith 后面这个W小写了,这种错误和不能定义和MRC相冲突的变量一样! init family 在学习官方文旦的时候也看见过这词!
15.图层的颜色要用CGColor
为什么图层的颜色要用CGColor?
layer.backgroundColor = [UIColor brownColor].CGColor;
查看图层的backgroundColor属性就知道:
@property CGColorRef backgroundColor;
原来它的颜色类是CGColorRef
同理:
layer.contents = (id)[UIImage imageNamed:@"12.png"].CGImage;
也是如此
那为什么呢:
因为:CGImageRef、CGColorRef两种数据类型是定义在CoreGraphics框架中的;UIColor、UIImage是定义在UIKit框架中的
待续...
- 编程细节 - 1
- 编程细节
- 编程细节
- 编程细节
- linux编程细节1-内核-文件目录
- C编程的细节(1)
- 转,WINSOCK编程细节。
- 编程的小细节
- MiniGUI编程-细节
- ALSA编程细节分析
- c++编程细节
- D3D编程细节收集
- ALSA编程细节分析
- Linux socket 编程细节
- ALSA编程细节分析
- ALSA编程细节分析
- 编程细节大荟萃
- IOS UI编程细节
- 互联网公司自毁的特征
- VC ActiveX(COM) 数据类型对照表
- CocoaPods安装和使用教程
- 浅谈过载保护
- ios 32/64位 lame静态库libmp3lame.a 编译,支持arm64 armv7s x86_64 i386 armv7
- 编程细节 - 1
- error MSB3073::VCEnd”已退出,代码为 4
- Hibernate级联查找
- javascript操作select 组件 opetion的增减
- vs2010 error C2001: 常量中有换行符
- Hadoop之——使用hadoop自定义类型处理手机上网日志
- 使用反射来获取枚举的名称、值和特性
- ubuntu修改IP地址和网关
- 第十二周 项目2-摩托车继承自行车和机动车