三中小助手

  • Powered By ALIYUN.
  • 该项目全部由 Objective-C 纯代码编写,Swift 语言将在后续版本采用 Bridge 的方式引入。

简介

  • 优雅的校园探索页面
  • 快速的校园新闻浏览平台
  • 体贴的校园学生早放信息推送

描述

三中小助手是一个基于香港阿里公有云的学生校园互联轻应用。

目录结构

三中小助手-iOS 目录:

.
├── SLSC-iOS
│   ├── Vendor:手动导入的第三方库
│   │   ├── SYNetWork:第三方封装 AFNetworking 的请求库
│   ├── Supporting Files
│   ├── PreFix:宏定义
│   ├── BaseController:父类控制器
│   │   ├── ViewController:父类视图控制器
│   │   ├── TableViewController:设置页面继承该父类
│   │   ├── TabBarController:继承自 CYLTabBar 的底部页面切换控制器
│   ├── Modules:项目拆分模块
│   │   ├── Discover:发现页面
│   │   ├── HomeDetail:首页校闻点后的信息展示
│   │   ├── Privacy Policy:隐私政策
│   │   ├── Terms of Use:使用协议
│   │   ├── About:设置-关于页面
│   │   ├── Settings:设置页面
│   │   ├── Home:校闻页面(首页)          
│   └── Pods:用到的一些第三方类库
│       ├── AFNetworking
│       ├── CYLTabBarController
│       ├── DZNEmptyDataSet
│       ├── Masonry
│       ├── MBProgressHUD
│       ├── MJExtension
│       ├── MJRefresh
│       ├── NJKWebViewProgress
│       ├── SDWebImage
│       ├── TabCardView
│       ├── UITableView+FDTemplateLayoutCell
│       ├── YYCache        
└── Pods:项目使用了[CocoaPods](http://code4app.com/article/cocoapods-install-usage)这个类库管理工具

iOS 客户端环境部署

$ sudo gem install cocoapods --pre
$ pod install --verbose
  • 打开 slsc.xcworkspace 进行编译。

License

SLSC-iOS is available under the MIT license. See the LICENSE file for more info.

Links

GitHub 链接:点击我

1、GCD 简介

全名:Grand Central Dispatch,它是苹果为多核的并行运算提出的解决方案,会合理利用CPU、自动管理线程的生命周期。使用时只需要在Block中写入需要执行的代码即可。使用非常灵活。

1.1 GCD 死锁问题

-(void)gcd{
NSLog(@"test1");
dispatch_sync(dispatch_get_main_queue(), ^{
    NSLog(@"test2");
});
NSLog(@"test3");
} 

输出:

2019-02-23 16:12:36.353985+0800 GCDDemo[24815:1940432] 1

这样操作 GCD 会卡在 dispatch_sync(dispatch_get_main_queue(), ^{, 或者报异常
由于是主队列同步执行而且 block 是后下入主队列的,所以 block 会放到主队列的后面等待主队列执行完毕后再执行,所以 2 是放在 3 的后面的。但是主线程也在等 block 执行完毕,这样主线程才会继续执行。也就是说 3 又在等 2 执行完毕才会执行。所以出现了死锁。

未完待续

前言:

在写项目的时候,发现一个 BUG:有一个 @propery 声明的可变数组,无论怎么增加子数组,都不会发生变化,且始终为 nil .

分析:

如果可变数组 NSMutableArray 没有在内存中创建的话,通过 @propery 创建私有属性,这个时候你要是想调用 addObjectFromArray 添加子数组,这种操作是没用的...因为它原来是 nil ,所以不论你怎么操作都始终为 nil .

[self.newsArray addObjectFromArray:a]; // newsArray 为 @propery 声明的属性(私有); a 为子数组

解决方案:

解决办法是用 LazyLoad 懒加载这个可变数组,在程序需要用到的时候就会在内存中开辟空间。

# pragma mark - lazyload
- (NSMutableArray *)newsArrary{
    if (!_newsArrary) {
        _newsArrary = [NSMutableArray array];
    }
    return _newsArrary;
}

前言:

今天利用 Bootstrap 框架写页面,页面中也运用了 AJAX 技术,碰到个 Button 一直刷新网页,导致 AJAX 失效的问题。

解决方案:

添加 type="button" 即可解决

<button class="btn btn-lg btn-primary btn-block" name="submit" onclick="query()" href="#" type="button">开始查询</button>