当前位置: 首页 > news >正文

微信公众号 网站开发 2016做网站建设公司crm在线的提升服务

微信公众号 网站开发 2016,做网站建设公司crm在线的提升服务,上海网站建设代码,ui培训设计机构11、解释self [super init]方法#xff1f; 容错处理, 当父类初始化失败,会返回一个nil, 表示初始化失败。 由于继承的关系, 子类是需要拥有父类的实例和行为, 因此, 我们必须先初始化父类,然后再初始化子类 12、简述使用block有什么优点#xff1f;代码紧凑#xff0c;传值…11、解释self [super init]方法 容错处理, 当父类初始化失败,会返回一个nil, 表示初始化失败。 由于继承的关系, 子类是需要拥有父类的实例和行为, 因此, 我们必须先初始化父类,然后再初始化子类 12、简述使用block有什么优点代码紧凑传值、回调都很方便省去了写代理的很多代码。 NSTimer封装成的block具体实现实现方法 NSTimer *timer [NSTimer scheduledTimerWithTimeInterval:1.0         repeats:YES         callback:^() {                 weakSelf.secondsLabel.text ...         } [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; 13、 Object-C中是否有二维数组如何实现二维数组 在实际的项目开发中二维数组也是常常用到的数据结构。 OC中的二维数组也是通过一维数组来建立的今天我们来详解一下如何在OC中使用二维数组。 使用NSArray初始化的一维数组和二维数组都是不可变数组。 #import int main(int argc, const char * argv[]) {         autoreleasepool {         //定义2个一维数组         NSArray *firstRow [[NSArray alloc] initWithObjects:1,2,3, nil];         NSArray *secondRow [[NSArray alloc] initWithObjects:4,5,6, nil];         //使用一维数组来初始化二维数组         NSArray *my2DArray [[NSArray alloc] initWithObjects:firstRow,secondRow, nil];         //输出二维数组对象         NSLog(二维数组%,my2DArray);         //遍历二维数组         for (int i 0; i [my2DArray count]; i) {                         for (int j 0; j firstRow.count; j) {                                 NSLog(二维数组元素%,[[my2DArray objectAtIndex:i] objectAtIndex :j]);                         }                 }         }         return 0; }14、简述property属性的修饰符的作用gettergetName、settersetName设置setter与getter的方法名readwrite、readonly设置可供访问级别assign方法直接赋值不进行任何retain操作为了解决原类型与环循引用问题retain其setter方法对参数进行release旧值再retain新值所有实现都是这个顺序 copy其setter方法进行copy操作与retain处理流程一样先对旧值release再copy出新的对象retainCount为1。 这是为了减少对上下文的依赖而引入的机制。 nonatomic非原子性访问不加同步 多线程并发访问会提高性能。 注意如果不加此属性则默认是两个访问方法都为原子型事务访问 15、 将字符串“2015-04-10”格式化日期转为NSDate类型 NSString *timeStr 2015-04-10; NSDateFormatter *formatter [[NSDateFormatter alloc] init]; formatter.dateFormat yyyy-MM-dd; formatter.timeZone [NSTimeZone defaultTimeZone]; NSDate *date [formatter dateFromString:timeStr]; // 2015-04-09 16:00:00 0000 NSLog(%, date); 16、简述SDWebImage内部实现过程入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示然后 SDWebImageManager 根据 URL 开始处理图片。进入 SDWebImageManager-downloadWithURL: delegate:options:userInfo:交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:.先从内存图片缓存查找是否有图片如果内存中已经有图片缓存SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageViewWebCache 等前端展示图片。如果内存缓存中没有生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。 根据 URLKey 在硬盘缓存目录下尝试读取图片文件。 这一步是在 NSOperation 进行的操作所以回主线程进行结果回调 notifyDelegate:。 如果从硬盘缓存目录读取不到图片说明所有缓存都不存在该图片需要下载图片回调 imageCache:didNotFindImageForKey:userInfo: 。共享或重新生成一个下载器 SDWebImageDownloader 开始下载图片。图片下载由 NSURLConnection 来做实现相关 delegate 来判断图片下载中、下载完成和下载失败。connection:didReceiveData: 中利用 ImageIO 做了按图片下载进度加载效果。connectionDidFinishLoading: 数据下载完成后交给 SDWebImageDecoder 做图片解码处理。图片解码处理在一个 NSOperationQueue 完成不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理最好也在这里完成效率会好很多。在主线程 notifyDelegateOnMainThreadWithInfo: 宣告解码完成imageDecoder:didFinishDecodingImage:userInfo: 回调给 SDWebImageDownloader。imageDownloader:didFinishWithImage: 回调给 SDWebImageManager 告知图片下载完成。通知所有的 downloadDelegates 下载完成回调给需要的地方展示图片。 将图片保存到 SDImageCache 中内存缓存和硬盘缓存同时保存。 写文件到硬盘也在以单独 NSInvocationOperation 完成避免拖慢主线程。 SDImageCache 在初始化的时候会注册一些消息通知在内存警告或退到后台的时候清理内存图片缓存应用结束的时候清理过期图片。 SDWI 也提供了 UIButtonWebCache 和 MKAnnotationViewWebCache方便使用。 SDWebImagePrefetcher 可以预先下载图片方便后续使用 17、 为什么 Objective-C 的方法调用要用方括号? 首先要说的是Objective-C 的历史相当久远如果你查 wiki 的话你会发现Objective-C 和 C 这两种语言的发行年份都是 1983 年。在设计之初二者都是作为 C 语言的面向对象的接班人希望成为事实上的标准。 最后结果大家都知道了C 最终胜利了而 Objective-C 在之后的几十年中基本上变成了苹果自己家玩的玩具。不过最终由于 iPhone 的出现Objective-C 迎来了第二春在 TOBIE 语言排行榜上从 20 名开外一路上升排名曾经超越过 C达到了第三名但是随着 swift 的出现Objective-C 的排名则一路下滑 Objective-C 在设计之初参考了不少 Smalltalk 的设计而消息发送则是向 Smalltalk 学来的。Objective-C 当时采用了方括号的形式来表示发送消息为什么没有选择用点呢 我个人觉得是当时市面上并没有别的面向对象语言的设计参考而 Objective-C 「发明」了方括号的形式来给对象发消息而 C 则「发明」了用点的方式来 “发消息”。 有人可能会争论说 C 的「点」并不是真正的发消息但是其实二者都是表示「调用对象所属的成员函数」。 另外有读者评论说使用方括号的形式是为了向下兼容 C 语言我并不觉得中括号是唯一选择C 不也兼容了 C 语言么Swift 不也可以调用 C 函数么最终其实是 C 的「发明」显得更舒服一些所以后来的各种语言都借鉴了 C 的这种设计也包括 Objective-C 在内。Objective-C 2.0 版本中引入了 dot syntax即a obj.foo 等价于 a [obj foo]obj.foo 1 则等价于 [obj setFoo:1]Objective-C 其实在设计之中确实是比较特立独行的除了方括号的函数调用方式外还包括比较长的可读性很强的函数命名风格。我个人并不讨厌 Objective-C 的这种设计但是从 Swift 语言的设计来看苹果也开始放弃一些 Objective-C 的特点了比如就去掉了方括号这种函数调用方式。所以回到我们的问题我个人认为答案就是Objective-C 在 1983 年设计的时候并没有什么有效的效仿对象于是就发明了一种有特点的函数调用方式现在看起来这种方式比点操作符还是略逊一筹。 大多数语言一旦被设计好就很难被再次修改应该说 Objective-C 发明在 30 年前还是非常优秀的它的面向对象化设计得非常纯粹比 C 要全面得多也比 C 要简单得多。 18、如何创建一个可以被取消执行的 block// 方法一创建一个类将要执行的 block 封装起来然后类的内部有一个 _isCanceled 变量在执行的时候检查这个变量如果 _isCanceled 被设置成 YES 了则退出执行。         typedef void (^Block)();         interface CancelableObject : NSObject                 - (id)initWithBlock:(Block)block;                 - (void)start;                 - (void)cancel;         endimplementation CancelableObject {         BOOL _isCanceled;         Block _block; }- (id) initWithBlock: (Block)block {         self [super init];         if (self ! nil) {                 _isCanceled NO;                 _block block;         }         return self; }- (void) start {         __weak typeof(self) weakSelf self;         dispatch_async(dispatch_get_global_queue(0, 0),         ^{                 if (weakSelf) {                         typeof(self) strongSelf weakSelf;                         if (!strongSelf-_isCanceled) {                                 (strongSelf-_block)();                         }                 }         }); } - (void) cancel {         _isCanceled YES; } end // 另外一种写法将要执行的 block 直接放到执行队列中但是让其在执行前检查另一个 isCanceled 的变量然后把这个变量的修改实现在另一个 block 方法中如下所示 typedef void (^CancelableBlock)(); typedef void (^Block)(); (CancelableBlock) dispatch_async_with_cancelable:(Block)block {         __block BOOL isCanceled NO;         CancelableBlock cb ^() {                 isCanceled YES;         };         dispatch_async(dispatch_get_global_queue(0, 0), ^{                 if (!isCanceled) {                         block();                 }         });         return cb; } 以上两种方法都只能在 block 执行前有效如果要在 block 执行中有效只能让 block 在执行中有一个机制来定期检查外部的变量是否有变化而要做到这一点需要改 block 执行中的代码。 在本例中如果 block 执行中的代码是通过参数传递进来的话似乎并没有什么办法可以修改它了 19、简述IOS __block和__weak修饰符的区别1、__weak: __weak只能在ARC下使用且只能修饰对象不能修饰基本数据类型int等,弱引用可以block解决循环引用问题。2、__block: __block既能再ARC下使用也能在 MRC下使用。既能修饰对象又能修饰基本数据类型。ARC、MRC区别__block对象在ARC下可能会导致循环引用非ARC下会避免循环引用。ARC、MRC共同点block内对于栈上的数据不能修改使用__block修饰以后放到了堆上就可以修改了。20、解释单例的写法在单例中使用数组要注意什么static PGSingleton *sharedSingleton; (instancetype)sharedSingleton {         static dispatch_once_t onceToken;         dispatch_once(onceToken, ^{                 sharedSingleton [[PGSingleton alloc] init];         });         return sharedSingleton; }其实上面的还不是标准的单例方法标准的单例方法需要重写 copyWithZone,allocWithZone,init,确保以任何方式创建出来的对象只有一个这里就不详细写了。 单例使用 NSMutableArray 的时候防止多个地方对它同时遍历和修改的话需要加原子属性。 并且property用strong并且写一个遍历和修改的方法。 加上锁. Lock,UnLock.PS:考虑性能问题尽量避免使用锁在苹果的文档张看到的不要问我为什么我也忘了自己查去。。)
http://www.dnsts.com.cn/news/154108.html

相关文章:

  • 上海专业的网站建网页游戏服务器搭建
  • 电子工程网站有哪些wordpress自动提交
  • 邢台网站建设报价多少钱网站建设时间及简介
  • 网店代运营合同自己如何做网站优化
  • 行业网站模版wordpress 首页 分类
  • 沈阳城市建设学院网站为什么别的电脑能打开的网站我的电脑打不开
  • 美工个人网站个人做电影网站违法吗
  • 用dw做网站结构图wordpress添加 下载文件
  • 最新章节 62.一起来做网站吧ui网页设计公司
  • 网站开发获取报价友情链接怎么做
  • 网站建设ssc源码最新中国室内设计网欧式
  • 网站代做正规品牌网站设计图片
  • 网站制作 佛山哪个外包公司比较好
  • 怎么给网站做优化编程猫官网
  • 网站背景音乐网站欢迎界面源码
  • 网站开发外文参考文献wordpress流行漏洞
  • 淘宝app网站建设编程猫加盟条件和费用
  • 邢台网站关键词优化建筑最吃香的专业
  • 做网站怎样设置搜索引擎做图表用的网站
  • 建网站的公司哪家好网络广告人社区官网
  • 大丰做网站找哪家好可以做公众号背景图的网站
  • iis 多网站安全设置建设工程信息网一体化平台
  • 威县做网站哪里好开什么网店简单又挣钱
  • 网站维护发展南昌网站快速排名提升
  • 制作网站的素材wordpress手机版插件
  • intitle 律师网站建设的重要性企业文化包括哪些内容
  • 企业网站源码是什么免费发布房源的平台
  • 广州建设银行网站首页长春小程序开发制作
  • 亚洲做性视频网站制作网站建网站
  • 网站设计公司深圳内蒙古住房与城乡建设厅网站