LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭

LOFTER-网易轻博

性能

2150浏览    362参与
李勇15116910182

30CrNiMo8性能及应用讲解

1、30CrNiMO8读作:三零铬镍钼零八

2、执行标准:GB/T3077-88

3、钢组系列:CrNiMo、数字代号:1.6580

3、钢厂:德国、西宁特钢、冶钢、东北特钢等。德国DIN标中30CrNiMo8是调质钢,相当于我国30Cr2Ni2Mo。

4、30CrNiMO8特性:有较高的屈服强度、抗拉强度和疲劳强度,还有足够的塑性和韧性。

5、冶炼方法:一般采用电弧炉和氧气顶吹转炉冶炼,要求高的采用炉外精炼、电渣重熔或真空处理、真空感应炉冶炼或双真空冶炼、合适的热处理。

6、交货状态:一般以退火状态交货,具体交货状态应在质保书中注明。

7、30CrNiMo8热处理工艺:...



1、30CrNiMO8读作:三零铬镍钼零八

2、执行标准:GB/T3077-88

3、钢组系列:CrNiMo、数字代号:1.6580

3、钢厂:德国、西宁特钢、冶钢、东北特钢等。德国DIN标中30CrNiMo8是调质钢,相当于我国30Cr2Ni2Mo。

4、30CrNiMO8特性:有较高的屈服强度、抗拉强度和疲劳强度,还有足够的塑性和韧性。

5、冶炼方法:一般采用电弧炉和氧气顶吹转炉冶炼,要求高的采用炉外精炼、电渣重熔或真空处理、真空感应炉冶炼或双真空冶炼、合适的热处理。

6、交货状态:一般以退火状态交货,具体交货状态应在质保书中注明。

7、30CrNiMo8热处理工艺:

(1)30CrNiMo8淬火加热温度:800-850℃;冷却剂:空冷。

(2)30CrNiMo8回火加热温度:650-690℃;冷却剂:空冷。

8、化学成分:


9、力学性能:




10、应用:

应用广泛,除了用于压力较高且波动频繁的高压化工容器外,还用于压力管道、塑料模具、重要的结构等。如东方汽轮机厂FD70A、FD77A型风力发电机组主轴采用优质合金钢(30CrNiMo8)锻件制造。

11、30CrNiMo8用途:轴、凸轮轴、轮轴、杠杆、连杆、摇臂、齿轮等。12、河南润禄贸易有限公司舞阳钢铁、武钢、新余、安钢:期、现货、切割(法兰、异形件)临氢、抗氢容器板定轧,热轧、控轧、正火、回火、淬火、调质等其他交货状态。全年无休假,可随时发货,欢迎来电来函咨询!

晨之晓
国内的用户悲催了,你跑的再快人...

国内的用户悲催了,你跑的再快人家是在开车呀!

国内的用户悲催了,你跑的再快人家是在开车呀!

容定斋

737 MAX 软件升级

更多精彩内容,请微信关注“容定斋”。


此次737 MAX软件升级公告,我认为干货就三条,就是软件升级以后:


1.人工操作将可以超控MCAS。

2.针对每次大迎角事件,MCAS仅会输入一次低头信号,不会反复多次输入。

3.驾驶舱仪表盘上会显示迎角信息和迎角不一致标识。


这次软件升级,在一定程度上解决了MCAS所带来的问题,但MCAS的设计初衷是为了应对737 MAX在爬升时易出现大迎角导致失速的风险,此次软件升级对于这个问题似乎没有什么实质性改观。


以下为波音发布的737 MAX软件升级公告翻译及原文。(个人翻译,如有谬误,多多包涵)


01

概述


机动特性增强系...

更多精彩内容,请微信关注“容定斋”。



此次737 MAX软件升级公告,我认为干货就三条,就是软件升级以后:


1.人工操作将可以超控MCAS。

2.针对每次大迎角事件,MCAS仅会输入一次低头信号,不会反复多次输入。

3.驾驶舱仪表盘上会显示迎角信息和迎角不一致标识。


这次软件升级,在一定程度上解决了MCAS所带来的问题,但MCAS的设计初衷是为了应对737 MAX在爬升时易出现大迎角导致失速的风险,此次软件升级对于这个问题似乎没有什么实质性改观。


以下为波音发布的737 MAX软件升级公告翻译及原文。(个人翻译,如有谬误,多多包涵)


01

概述


机动特性增强系统(MCAS)的飞行控制规则是为了增强737MAX的俯仰稳定性而设计,并通过了认证。目的是使其飞行操纵更像其他的737机型。

 

MCAS的设计原理是在人工操纵飞行阶段、襟翼收起且大迎角时启动。

 

波音已经提供了MCAS软件的升级方案,在迎角传感器提供错误信号时,提供额外的多层保护。该软件已经完成数百小时的分析和实验测试,并在一次模拟机和两次实际飞行中得到验证,其中包括一次由FAA代表作为机上观察员的认证飞行。

 

额外的多层保护包括:

1.现在飞行控制系统将会对比两个迎角传感器的输入信号。在襟翼收起时,如果两个传感器相差大于等于5.5度,那么MCAS将不会被激活,飞行仪表上将显示指示信息以警示飞行员。


2.如果MCAS在非正常条件下启动,它仅会为每次大迎角事件提供一次信号输入,将不会出在已知或预想的故障条件下MCAS多次提供输入信号的情况。


3.MACS永远不会给出飞行机组不能通过回拉操纵杆抵消的水平安定面控制指令。飞行员将始终具备超控MCAS并进行人工飞行的能力。

 

这些更新减少了在非正常飞行情况下的机组的工作负荷,并杜绝了由于错误信号引起MCAS启动的情况。

 

我们将同FAA和其他管理机构继续开展软件更新的认证工作。


原文

Overview

The Maneuvering Characteristics Augmentation System (MCAS) flight control law was designed and certified for the 737 MAX to enhance the pitch stability of the airplane – so that it feels and flies like other 737s.

MCAS is designed to activate in manual flight, with the airplane’s flaps up, at an elevated Angle of Attack (AOA).

Boeing has developed an MCAS software update to provide additional layers of protection if the AOA sensors provide erroneous data. The software was put through hundreds of hours of analysis, laboratory testing, verification in a simulator and two test flights, including an in-flight certification test with Federal Aviation Administration (FAA) representatives on board as observers.

The additional layers of protection include:

· Flight control system will now compare inputs from both AOA sensors. If the sensors disagree by 5.5 degrees or more with the flaps retracted, MCAS will not activate. An indicator on the flight deck display will alert the pilots.

· If MCAS is activated in non-normal conditions, it will only provide one input for each elevated AOA event. There are no known or envisioned failure conditions where MCAS will provide multiple inputs.

· MCAS can never command more stabilizer input than can be counteracted by the flight crew pulling back on the column. The pilots will continue to always have the ability to override MCAS and manually control the airplane.

These updates reduce the crew’s workload in non-normal flight situations and prevent erroneous data from causing MCAS activation.

We continue to work with the FAA and other regulatory agencies on the certification of the software update.


02

训练

飞行员必须完成至少21天的由教员带领的理论和模拟机培训后,才能获得B737机型的型别等级。737NG和737MAX的差异训练应包括CBT训练和手工操作回顾。

 

波音已经完成了CBT的升级,以匹配软件升级。一旦获得批准,其将适用于所有737MAX飞行员。该课程设计用于增强737型别的飞行员对737MAX速度配平系统的理解,包括MCAS功能、相关的机组程序和软件更新。

 

要求飞行员回顾的内容还包括:


1.飞行机组操作手册通告。


2.升级的速度配平失效的非正常检查单。


3.重新设计的快速检查单(QRH)。

原文

Training

To earn a Boeing 737 type rating, pilots must complete 21 or more days of instructor-led academics and simulator training. Differences training between the NG and MAX includes computer-based training (CBT) and manual review.

Boeing has created updated CBT to accompany the software update. Once approved, it will be accessible to all 737 MAX pilots. This course is designed to provide 737 type-rated pilots with an enhanced understanding of the 737 MAX Speed Trim System, including the MCAS function, associated existing crew procedures and related software changes.

Pilots will also be required to review:

· Flight Crew Operations Manual Bulletin

· Updated Speed Trim Fail Non-Normal Checklist

· Revised Quick Reference Handbook


03

737MAX飞行仪表显示器


为安全而高效地操纵737MAX而所需要的所有主要飞行信息都将显示在基本构型的主飞行显示面板上。在我们所有的商用飞机上都是如此,波音为实现必需的飞行安全设计不计代价。用以安全、高效地操纵飞机的机组程序和训练,其所关注的飞机横滚、俯仰姿态,航向和垂直速度均集成显示在主飞行显示器上。所有的737MAX飞机显示此类数据的方法与飞行员训练内容以及飞行员训练的基本仪表扫描模式一致。

 

迎角指示器为飞行机组提供补充信息。迎角不一致信息是为理解引起正副驾驶显示器上空速和高度不一致的原因提供额外的参考。这些装置的信息均由迎角传感器提供。

 

在飞行中没有需要掌握迎角只是才能实施的飞行操作和程序。

原文

737 MAX Flight Deck Displays

All primary flight information required to safely and efficiently operate the 737 MAX is included on the baseline primary flight display. This is true of all our commercial products. Boeing doesn’t put a price on required safety features. Crew procedures and training for safe and efficient operation of the airplane are focused around airplane roll and pitch attitude, altitude, heading and vertical speed, all of which are integrated on the primary flight display. All 737 MAX airplanes display this data in a way that is consistent with pilot training and the fundamental instrument scan pattern that pilots are trained to use.

The AOA (angle of attack) indicator provides supplementary information to the flight crew. The AOA disagree alert provides additional context for understanding the possible cause of air speed and altitude differences between the pilot’s and first officer’s displays. Information for these features is provided by the AOA sensors.

There are no pilot actions or procedures during flight which require knowledge of angle of attack.


04

关键定义

机动特性增强系统(MCAS)——在737MAX上应用的飞行控制规则,用以提高飞机的操纵特性和在大迎角情况下减小飞机抬头趋势。

迎角(AOA)——飞机俯仰角(机头方向)和迎面风的夹角。

迎角传感器——安装在飞机外部的装置,用以测量并为机载计算机提供迎角信息,也成为迎角叶片。

迎角不一致信息——基于软件的信息提示功能,用以当左右迎角传感器迎角不一致时警示飞行机组。有助于飞行员了解可空气数据不一致并提示故障日志输入。

迎角指示标识——基于软件的信息提示功能,通过主飞行显示器为飞行机组提供迎角数据。该功能选项可由客户自选。

控制规则——实施飞行控制功能或任务的一整套软件。

FCOM(飞行机组操作手册通告)——操作信息补充。

FOTB(飞行操作技术通告)——操作信息补充。

速度配平系统——必要时为飞机提供额外速度和俯仰稳定性的多组件系统。

原文

Key Definitions

Maneuvering Characteristics Augmentation System (MCAS) – flight control law implemented on the 737 MAX to improve aircraft handling characteristics and decrease pitch-up tendency at elevated angles of attack.

Angle of Attack (AOA) – the difference between the pitch angle (nose direction) of the airplane and the angle of the oncoming wind.

Angle of Attack Sensor / Vane – hardware on the outside of the airline that measures and provides angle of attack information to onboard computers; also referred to as an AOA vane.

Angle of Attack Disagree – a software-based information feature that alerts flight crews when data from left and right angle of attack sensors disagree. This can provide pilots insight into air data disagreements and prompts a maintenance logbook entry.

Angle of Attack Indicator – a software-based information feature that provides angle of attack data to the flight crew through the primary flight displays. It is an option that can be selected by customers.

Control law – a set of software that performs flight control function or task

FCOM (Flight Crew Operations Manual Bulletin) – supplementary operations information

FOTB (Flight Operations Technical Bulletin) – supplementary technical information

Speed trim system – a system that uses multiple components to provide additional speed or pitch stability when needed.



汽车评论周磊

不受待见的小型两厢车,推出性能版能否成为爆点?

在日前举行的2019年日内瓦车展上,标致带来了全新208以及电动版e-208。第二代208基于全新CMP模块化平台打造,采用了标致最新的家族式设计语言,獠牙式日间行车灯非常抢眼。


全新标致208提供汽油、柴油和纯电动三种动力单元,1.2T汽油发动机又分三种不同功率调校。其高功率版本的最大功率为130Ps,匹配的是8AT。活脱一辆小钢炮的全新标致208,却仍不确定是否会引入国内,似乎小型两厢车只是欧洲人的专利,在美国、中国都不怎么招待见。但是小型性能车是否会成为中国市场的下个风口呢?车业杂谈认为很有可能。

WRC和CTCC的参赛车型多为紧凑型、小型车

WRC是世界汽车拉力锦标赛,CTCC...

在日前举行的2019年日内瓦车展上,标致带来了全新208以及电动版e-208。第二代208基于全新CMP模块化平台打造,采用了标致最新的家族式设计语言,獠牙式日间行车灯非常抢眼。

全新标致208提供汽油、柴油和纯电动三种动力单元,1.2T汽油发动机又分三种不同功率调校。其高功率版本的最大功率为130Ps,匹配的是8AT。活脱一辆小钢炮的全新标致208,却仍不确定是否会引入国内,似乎小型两厢车只是欧洲人的专利,在美国、中国都不怎么招待见。但是小型性能车是否会成为中国市场的下个风口呢?车业杂谈认为很有可能。

WRC和CTCC的参赛车型多为紧凑型、小型车

WRC是世界汽车拉力锦标赛,CTCC是指中国房车锦标赛,作为国人较熟悉的两个汽车赛事,虽然场地不同,但有个共同点,那就是参赛车型多为紧凑型或小型车。为何WRC和CTCC会偏爱这种两厢小车呢?

一方面,全球对节能减排越发重视,FIA倡导顶级赛事F1和WRC要在赛车上的技术能让量产车受益。所以WRC在不断下调参赛车型的尺寸和排量,而如今市面上的小型车多为两厢车,于是参赛车型也基本是两厢小车了。

另一方面,两厢小车在操控方面更有优势。小型两厢车轴距短,重心高,在高速弯的极限并不高,但是在WRC这种更贴近我们日常行驶的道路,两厢车更容易完成漂移动作,也就是说低速弯更有优势。此外,面对一些很窄的拉力赛道,两厢车的行车线更加灵活,不用像三厢车一样顾头顾尾。

小型性能车是更好的资源利用

除跑车外,量产车有个规律,你想要获得更强的动力,就只能购买更大尺寸的车型。因为更强的发动机性能,意味着更高的成本,既然价格上去了,那么厂家为了照顾高消费人群,就要提供与之匹配的舒适驾乘空间和丰富的配置。层层叠加之下,性能车变成了普通消费者难以企及的一样东西。

跑车为什么要追求轻量化?因为发动机的性能摆在那,只有更轻的车身重量才能带来更大的推重比,也就意味着更好的动力表现。所以我们看到那些豪华跑车,动不动就碳纤维材质,动不动就全铝车身,卖天价也就情理之中了。可是对于一辆性能车而言,我缩小车身不就是最快的轻量化方式吗?

同样的百公里加速成绩,一台中型车可能需要2.0T发动机才能实现,而一台小型车或许只要1.5T发动机就能做到。所以只追求性能的话,小型性能车是更好的资源利用。

空间需求真有你想象的那么大吗?

欧洲特别流行两厢车,中国则更偏爱三厢大车。这个很好理解,欧洲保留了很多上世纪的建筑,道路比较狭窄,有些建筑间的道路可能仅够一辆车通行,在这样的道路环境下,两厢轿车更加灵巧。另一方面,欧洲人讲究实用,两厢车储物更加方便。比如一些立式的盆栽,两厢车可以直接放后备箱,三厢车则显得有点没辙。所以紧凑型和小型两厢车在欧洲大行其道。

中国经历了数千年的封建社会,对轿子这种东西留有高贵的印象,毕竟古时候只有达官贵人才有资格坐轿子,所以有头有尾的三厢车更容易受中国人青睐。而且中国人讲究大气、阔气,座驾越大,别人越觉得车主有钱、有地位,所以喜欢大车也算一种虚荣心使然。

可是,都9102年了,我们对空间的需求真有那么大吗?曾有位朋友买了辆中型车,结果第一个星期就剐蹭了三次。纵有个人技术的原因,但中国越来越拥堵的路况,的确对大车不再友好了。特别是现在很多路边的侧方停车位,车越长越难停。

另一方面,中国为什么近年来涌现出这么多的共享汽车企业?那是因为在出行行业存在很多资源浪费,特别在很多一线城市,单人单车出行的概率超过了50%。这意味着一辆五座车,从它出厂到开报废,其中有4个座位的利用率是非常低的。所以国人强调的空间需求,其实并没有我们想象中这么强烈。

写在最后:追求速度是人类对汽车不变的诉求,而且随着年轻消费群体的崛起,对性能的需求将占比越来越大。比如有“法拉域”之称的本田思域,月均保持着两三万的销量,而备受冷漠的韩系车,近期推出的现代菲斯塔,上市后销量迅速就破万了。随着思想开放的年轻人逐渐成为消费主力,小型两厢性能车成为下个风口也不是没可能。

汽车评论周磊

汽车性能哪个最重要?买车时你需要考虑这些

买车时,你最看重汽车的什么?车业杂谈相信,不少朋友会把造型设计放在第一位,毕竟爱美之心人皆有之。但汽车不是装饰品,作为出行工具的它,甚至关系着我们的生命安全,因此在抛开感性设计后,车业杂谈更加看重以下这些汽车性能。

汽车安全是现代汽车必须具备的条件。

生命安全问题是现代人最为关注的问题,因此汽车安全就应当是现代汽车必须具备的条件,同时它也是车业杂谈最为关注的汽车性能。

从汽车的安全性方面来讲,我们可以将汽车安全分为主动安全和被动安全两方面。主动安全大多为科技性配置,能够有效预防事故的发生,如车道偏离预警、碰撞预警等都是主动安全的一部分。


目前全球范围内各个权威测试都已经将主动安...

买车时,你最看重汽车的什么?车业杂谈相信,不少朋友会把造型设计放在第一位,毕竟爱美之心人皆有之。但汽车不是装饰品,作为出行工具的它,甚至关系着我们的生命安全,因此在抛开感性设计后,车业杂谈更加看重以下这些汽车性能。

汽车安全是现代汽车必须具备的条件。

生命安全问题是现代人最为关注的问题,因此汽车安全就应当是现代汽车必须具备的条件,同时它也是车业杂谈最为关注的汽车性能。

从汽车的安全性方面来讲,我们可以将汽车安全分为主动安全和被动安全两方面。主动安全大多为科技性配置,能够有效预防事故的发生,如车道偏离预警、碰撞预警等都是主动安全的一部分。

目前全球范围内各个权威测试都已经将主动安全测试加入到汽车安全评测中,可见这些科技配置对于行车安全意义之大。也正是在这些测试推动下,不少主动安全配置已经从豪车的专利变成了汽车的标配,现在在一些入门级车型上,我们就能享受到主动安全系统带来的安心,买车时值得注意。

而被动安全则是事故发生后汽车保护人员的能力,高强钢的运用、吸能车身的普及,都是汽车被动安全提升的表现。当然了这里说的人员不仅是车内乘员,还有行人,软材质保险杠、车外气囊也都是为此而生的。可以说安全问题无小事,汽车安全理应被放在首位。

汽车动力、操控的好坏其实也关系着我们的安全。

如果说安全性是车业杂谈买车最看重的汽车性能,那么汽车的操控性和动力性则紧随其后。

汽车好开、动力强,对于玩车一族来说,具有很强的吸引力,毕竟他们追求的就是驾控。而一些将汽车定位为代步工具的消费者对此就不那么感冒了,不过车业杂谈认为这是一个误区。

我们知道,汽车的动力响应、操控灵敏度、制动距离等反应的是汽车根据驾驶者意愿做出响应行动的能力,汽车驾控好,就意味着它能更快、更准确的实现驾驶者意图。当我们在面对突发事件或路面情况不佳时,汽车对我们的操作响应越快,我们就越有机会避免危险的发生。因此汽车的动力、操控不仅意味着汽车好不好开,更影响着我们的行车安全。

大多数车主关心的还是汽车的油耗。

在满足了汽车安全刚需之后,油耗就成了车业杂谈最为关心的事情。

汽车与一些商品不同,它在使用和后期维护上还会产生费用,尽可能让这笔钱少,也是绝大多数车主朋友比较看重的问题。对于油耗来讲,由于工信部油耗测试工况过于理想化的缘故,我们实际驾驶油耗往往会高出不少,因此想要选择低油耗车型,不妨参考下车主口碑以及一些第三方软件的数据。

如果汽车拥有不错的通过性和储物空间就更好了。

最后,车业杂谈认为,每家每户总需要一些时间外出游玩、回家探亲,这个时候汽车良好的通过性、大空间就会派上用场了。因此,如果汽车的适用性更加广泛就更好了。

写在最后:安全第一、省钱第二,如果在这样的基础上还能拥有不错的空间,这样的车就是车业杂谈买车的首选,不知道在你心中,买车时最看重的汽车性能是什么呢?

容定斋

自动着陆对机场标高的要求

在网上看到一篇文章,说是A320飞机进行自动着陆时对落地机场的标高的要求是2500FT以下,后来我查证了一下,查公司的A320FCOM手册里面确实是这样写的,但是貌似就集中在A320系列机型里。于是抽空档时间查了一下A319、A321、B738、B748、B777的机型手册,FCOM里确实写了A319、A320、A321、B748四种机型进行自动落地的时候对落地机场的标高是有要求的。

A319机型里自动着陆对机场标高的要求:


A320/A321机型里自动着陆对机场标高的要求


B748机型里对机场标高的要求


B777机型手册里使用自动着陆时没有规定出自动着陆的高度


而在...

在网上看到一篇文章,说是A320飞机进行自动着陆时对落地机场的标高的要求是2500FT以下,后来我查证了一下,查公司的A320FCOM手册里面确实是这样写的,但是貌似就集中在A320系列机型里。于是抽空档时间查了一下A319、A321、B738、B748、B777的机型手册,FCOM里确实写了A319、A320、A321、B748四种机型进行自动落地的时候对落地机场的标高是有要求的。

A319机型里自动着陆对机场标高的要求:


A320/A321机型里自动着陆对机场标高的要求


B748机型里对机场标高的要求


B777机型手册里使用自动着陆时没有规定出自动着陆的高度


而在B738的手册里我没有找到描述与自动着陆限制条件相关的条目,也可能是我没有查到,毕竟我没有通读手册,如果在某个犄角旮旯也不一定。

从上面两张图可以看出来,对于能否在一些高原机场落地,规章手册里是由明确要求的。据说目前在II类机场用II类标准落地时,要求使用自动驾驶进行落地,因此其对机场标高也有一定的要求,如果达不到要求则是不能落地的。

在A320手册里找到这么一段,虽然说得不是很绝对,但是也说明自动着陆不能使用对II类是有一定影响的。


目前已知国内的几个有II类的机场里,应该只有昆明存在这个问题,因为昆明机场标高两千多米,肯定是大于2500英尺,因此当使用A320或A321执飞昆明航线时,可能是不能够满足自动着陆条件,也有可能无法使用II类标准进行着陆。

A319也有类似限制条件,但是A319和B748对机场标高的要求是比较宽松的,为9000多英尺。即3000多米,就目前来说国内还没有机场标高3000米以上的可以实施二类的机场。

国际机场我还没有查证,以后有机会查一下高于这个标准的国际II类机场。


容定斋

短跑道机场

今天上班时被问到短跑道机场是什么,以前以为只是口头上说的一种形容方式,结果并不是这样,经过同事指点,在公司的MEL手册里有短跑道机场的定义:

短跑道机场运行:指腾冲、版纳、丽江、芒市、攀枝花机场的起降。

我当时闲着没事就打开AIP,查了查这几个机场的资料,找了找规律,发现短跑道机场并不是其字面上的意思,即只要跑道短就被归类为短跑道机场,而是结合其机场标高而进行界定的。例如这几个机场里面跑道最长的是丽江,为3000米,这个长度的跑道不能算短的,但是因为其标高为2200多米,所以被划归为短跑道机场,其他的几个机场的跑道长度一般都在2000-3000米之间,一般跑道长一点的机场标高就会高一些,跑...

今天上班时被问到短跑道机场是什么,以前以为只是口头上说的一种形容方式,结果并不是这样,经过同事指点,在公司的MEL手册里有短跑道机场的定义:

短跑道机场运行:指腾冲、版纳、丽江、芒市、攀枝花机场的起降。

我当时闲着没事就打开AIP,查了查这几个机场的资料,找了找规律,发现短跑道机场并不是其字面上的意思,即只要跑道短就被归类为短跑道机场,而是结合其机场标高而进行界定的。例如这几个机场里面跑道最长的是丽江,为3000米,这个长度的跑道不能算短的,但是因为其标高为2200多米,所以被划归为短跑道机场,其他的几个机场的跑道长度一般都在2000-3000米之间,一般跑道长一点的机场标高就会高一些,跑道短一点的机场标高就会低一些,就像西南地区有很多机场的跑道长度比这几个机场里面的要短,但是因为机场标高低,也就没有被划为短跑道机场,整体规律是这样的。但是也有例外,例如保山机场和版纳机场跑道都是2400米,保山机场标高1600米,版纳标高500米,但是版纳是短跑道机场,保山不是,不过有可能因为是公司手册,只列出了公司执行的机场。不过绵阳机场也是2400米的跑道,但是机场标高只比版纳低40米左右,就没有被列为短跑道机场。

而像一些高高原机场之所以没有被列为短跑道机场,我想是因为他们的跑道实在是太长了,一般都在4000米以上,像阿里机场跑道4500米,这是我见过最长的跑道了,不知道世界上最长的跑道是不是这个。

其实按跑道长度结合机场标高划分短跑道机场的方法我觉得是很合理的,因为终究来说这个划分是要落到对飞机性能的影响上的,而这二者对飞机性能的影响显然是相互关联的。在MEL里也都标注出了当反推、自动刹车、防止、减速板等故障时在短跑道机场的运行限制。


黄双全的博客

谈谈MVVM和RAC1、MVVM浅析

MVC是构建iOS App的标准模式,是苹果推荐的一个用来组织代码的权威范式,市面上大部分App都是这样构建的,具体组建模式不细说,iOS入门者都比较了解(虽然不一定能完全去遵守),但其几个不能避免的问题却是很严重困扰开发者比如厚重的ViewController、遗失的网络逻辑(没有属于它的位置)、较差的可测试性等因此也就会有维护性较强、耦合性很低的一种新架构MVVM (MVC 引申出得新的架构)的流行。

MVVM虽然来自微软,但是不应该反对它,它正式规范了正式规范了视图和控制器紧耦合的性质,如下图:


MVVM图示

ViewModel: 相比较于MVC新...

MVC是构建iOS App的标准模式,是苹果推荐的一个用来组织代码的权威范式,市面上大部分App都是这样构建的,具体组建模式不细说,iOS入门者都比较了解(虽然不一定能完全去遵守),但其几个不能避免的问题却是很严重困扰开发者比如厚重的ViewController、遗失的网络逻辑(没有属于它的位置)、较差的可测试性等因此也就会有维护性较强、耦合性很低的一种新架构MVVM (MVC 引申出得新的架构)的流行。

MVVM虽然来自微软,但是不应该反对它,它正式规范了正式规范了视图和控制器紧耦合的性质,如下图:


MVVM图示

ViewModel: 相比较于MVC新引入的视图模型。是视图显示逻辑、验证逻辑、网络请求等代码存放的地方,唯一要注意的是,任何视图本身的引用都不应该放在VM中,换句话说就是VM中不要引入UIKit.h (对于image这个,也有人将其看做数据来处理,这就看个人想法了,并不影响整体的架构)。

这样,首先解决了VC臃肿的问题,将逻辑代码、网络请求等都写入了VM中,然后又由于VM中包含了所有的展示逻辑而且不会引用V,所以它是可以通过编程充分测试的。

so,就是这个样子的,6666!

2、RAC浅浅析

特别浅。。。本文重点是框架及实战及MVVM思想,RAC这玩意话说学习曲线较长,难以理解,不好上手,是因为之前学习的时候使用者、中文教程还比较少,所以学习运用起来比较费劲,(当时确实废了好大得劲,实力装逼一把 @%&$%& )但现在已经成熟的烂大街了,只要有心,好的教程一大把,能潜下心来看我写的水文的人,拿下RAC不在话下!

ReactiveCocoa 可以说是结合了函数式编程和响应式编程的框架,也可称其为函数响应式编程(FRP)框架,强调一点,RAC虽然最大的优点是提供了一个单一的、统一的方法去处理异步的行为,包括delegate方法,blocks回调,target-action机制,notifications和KVO.但是不要简单的只是单纯的认为他仅仅就是减少代码复杂度,更好的配合MVVM而已,小伙子,这样你就小看它了。

它最大的与众不同是提供了一种新的写代码的思维,由于RAC将Cocoa中KVO、UIKit event、delegate、selector等都增加了RAC支持,所以都不用去做很多跨函数的事。

如果全工程都使用RAC来实现,对于同一个业务逻辑终于可以在同一块代码里完成了,将UI事件,逻辑处理,文件或数据库操作,异步网络请求,UI结果显示,这一大套统统用函数式编程的思路嵌套起来,进入页面时搭建好这所有的关系,用户点击后妥妥的等着这一套联系一个个的按期望的逻辑和次序触发,最后显示给用户。

额,就说这么多,再说就没头了~(≧▽≦)/~啦啦啦!

3、本篇对两者的理解运用

在此次介绍中,会使用MVVM+RAC结合的方式,搞定一个添加上拉加载及下拉刷新的列表,所以更多的诠释MVVM思想,而不是RAC的逻辑链式操作(这一点用登录界面来写更能体现Y^o^Y ),RAC在此扮演的更大一部分的角色是更好的解耦,减少代码复杂度,使代码层次分明、逻辑清晰更便于维护升级。

二、框架部分1、框架目录详解

首先介绍一下本框架的目录结构,如下图


1、Frameworks

存放系统库的虚拟文件夹, 目前搭建框架的时候需要手动添加一个名称为Frameworks的虚拟文件夹,这样你在Build Phases 中添加的系统库会自动归入此文件夹,不会直接在外部显示以至于打乱目录结构。系统库添加流程如下:


另外,细心地家伙会发现此目录中有两个相同的Frameworks, 那这到底是什么鬼?最上面的那个Frameworks是在自己搭框架自己添加的,当时的项目还很单纯, 没有这么淘气,问题出在下面那个Pods Target上,添加它之后就会自动给你生成一个虚拟的Frameworks的文件夹,那又该问了为啥不直接用下面那个呢???(废话真多!反正也没冲突,就留着吧╮(╯﹏╰)╭)

既然提到了Pods,那接下来讲讲CocoaPods(第三方类库管理工具)。

2、CocoaPods

当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,反正在早期我是体会过这种痛苦,好心酸,手动一个个去下载所需类库是十分麻烦的。

还有另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。

CocoaPods就是帮你解决上面的问题的,话说这玩意应该是iOS最常用最有名的类库管理工具了,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了,至于这玩意该咋用?

O(∩_∩)O哈哈~你觉得我会告诉你么?好吧,我这人还是很心软的,下面一张图告诉你该咋用...(๑乛◡乛๑ 磨人的小妖精)


☝(•̀˓◞•́)哎呦,不错哦~是不是get了一个新技能 ?6666!

3、AppDelegate

这个目录下放的是AppDelegate.h(.m)文件,是整个应用的入口文件,所以单独拿出来。一会儿告诉你如何写一个简洁的AppDelegate,会在这个文件夹里添加一些类,所以将其放入一个文件夹内还是很有必要的。

4、Class

工程主体类, 日常大部分开发代码均在这里,又细分了好多次级目录。

通用类

  • General : 通用类(文件夹项目移植过程中都不需要更改的就能直接使用的)

    • Base : 基类 (整个框架的基类)

    • Categories : 公共扩展类 (就是一些常用的类别,比如分享啊什么的)

    • Core : 公共核心类(一般存放个人信息、接口API等)

    • Models : 公共Model (公用的一些数据模型)

    • Views : 公共View (封装的一些常用的View)

工具类

  • Helpers : 工程的相关辅助类(比如类似数据请求、表单上传、网络监测等工具类)

宏定义类

  • Macro : 宏定义类 (就是整个应用会用到的宏定义)

    • AppMacro.h app项目的相关宏定义

    • NotificationMacro.h 通知相关的宏定义

    • VendorMacro.h 第三方相关宏定义

    • UtilsMacro.h 为简化代码的宏定义

    • ...等等等等(其他随你定啦!Y^o^Y )

APP具体模块代码类

  • Sections : 各模块的文件夹(一般而言,我们以人为单位)

    • LSSections 王隆帅的文件夹

    • CLSections 马成麟的文件夹

    • ...等等等等(也可以写你最喜欢的苍老师的,叼叼的!)

每个成员的文件夹下是其所负责模块的文件夹,比如苍老师负责PHP界面模块(我也认为PHP是最好的语言!大家可以在评论区谈论一下!๑乛◡乛๑ 磨人的小妖精),如下(接着上面的个人文件夹):

  • PHP : 模块名,也可以是首页(HomePage)...等等

    • ViewControllers 界面控制器存放处(这是文件夹名)

    • ViewModels 打杂的(MVVM的核心、解耦合、处理逻辑等)

    • Views 界面相关View存放处(界面相关子View)

    • Models 数据模型存放处(各种单纯的数据模型,一点都不胖,是标准的瘦Model)

这就是标准的MVVM了。。。为啥不和上面目录连起来呢?为啥呢?为啥呢?因为臣妾做不到啊!!!(不会三级、四级列表的MarkDown写法,求大神支招!良辰必有重谢!)

第三方类库

  • Vendors : 第三方的类库/SDK,如UMeng、WeiboSDK、WeixinSDK等等。

到这哥们又该疑惑了,心里该碎碎念了:(๑⁼̴̀д⁼̴́๑)ドヤッ‼ What are you 弄啥嘞!刚才刚讲了个第三方库管理CocoaPods,你丫这里自己又搞了一个,ԅ( ¯་། ¯ԅ) 信不信我突突了你!

哈哈哈,刚才的CocoaPods确实管理着大部分的第三方库,这里建立第三方库目录的原因有两个:其一,并不是所有的你需要的第三方都支持pods的,所以还是需要手动添加一些类库。其二,一些第三方库虽然支持pods,但是需要我们去更改甚至自定义这个第三方,此时也需要放入这里,也防止使用pods一不小心更新掉你的自定义!ᕕ(ᐛ)ᕗ 你来打我啊!

5、Resource

这里放置的是工程所需的一些资源,如下

  • Fonts 字体

  • Images 图片(当然你可以添加至Assets.xcassets, 没人拦着你)

  • Sounds 声音

  • Videos 视频

ok,目录就讲到这里!想知道更详细的可以私信我!

2、基类详解

这里着重讲解一下VC、V、VM的基类,其他的模式与View类似所以略过,其中TableViewCell的基类稍微特殊所以也提一下。

我目前的基类如下图:


是不是眼花缭乱了..., 我曾经也看它不顺眼, 曾经尝试过把基类都干掉,然后遇到了一些麻烦...就妥协了,在文章的最后可以跟大家聊聊我是怎么去干掉基类,然后又失败的,这里先详细讲一下基类。

1、YDViewController



函数的具体用意图已经标的很清楚了,这里简单讲一下四个函数的作用

  • yd_addSubviews : 添加View到ViewController

  • yd_bindViewModel : 用来绑定V(VC)与VM

  • yd_layoutNavigation : 设置导航栏、分栏

  • yd_getNewData : 初次获取数据的时候调用(不是特别必要)

2、YDView



  • yd_setupViews : 添加子View到主View

  • yd_bindViewModel : 绑定V与VM

  • yd_addReturnKeyBoard : 设置点击空白键盘回收

3、YDViewModel



  • yc_initialize : 进行一些逻辑绑定,网络数据请求处理。

  • LSRefreshDataStatus 数据处理后需要进行的操作标识

    • LSHeaderRefresh_HasMoreData 下拉还有更多数据

    • LSHeaderRefresh_HasNoMoreData 下拉没有更多数据

    • LSFooterRefresh_HasMoreData 上拉还有更多数据

    • LSFooterRefresh_HasNoMoreData 上拉没有更多数据

    • LSRefreshError 刷新出错

    • LSRefreshUI 仅仅刷新UI布局

4、YDTableViewCell


由于Cell比较特殊,所以单拎出来说一下。观察上面的ViewMdoel、View等的基类会发现每个基类都会有数据绑定的地方,但是cell得数据绑定需要放在数据初始化的时候,因为所有的基类的数据逻辑绑定都是在没有返回初始化对象的时候调用的,但是cell中假如在那里面进行数据绑定会出现问题比如下图:


cell复用失败

上图中的函数假如是在 bindViewModel 内,则会复用失败,点击按钮是没有反应的,但是假如是在数据初始化的时候调用:比如 setViewModel 的时候,就会OK了,因为里面用到了cell的在RAC中复用机制 rac_prepareForReuseSignal ,在cell还没有初始化返回的时候是失效的。

3、题外话

基类的作用是统一管理,统一风格,便于编码,有更多的额外的附加功能的话,建议使用Protocol 或 Category,这样移植性强,便于管理与扩展,不至于牵一发而动全身。

本篇基类核心是用VM来配置V(VC),并提供一些必须的Protocol方法来处理界面显示、逻辑,将代码风格规范化,各个部分的功能明朗化,这样,当你需要写什么,需要找什么,需要更改什么的时候都会很明确这些代码的位置,逻辑更清晰,而不会浪费更多的时间在思考应该写在哪,该去哪找,要改的地方在哪这种不该费时间的问题上。

三、实战部分(经典列表的实现)

这里讲一下如下界面的代码构造方式,很普通的一个列表:(懒得再写了,这是我之前做的一个项目的一个界面,之前基类讲解中会看到都是YD开头的,在这里是YC开头就这个区别而已)


首先观察这个界面,需求是:头部的内容数量多的话是可以左右滑动的,然后整体是可以上拉加载的。我是这样处理的:首先界面整体是一个TableView,然后分为一个Header、一个Section和主体列表Row。在Header上嵌套一个CollectionView保证可复用。具体分层如下


然后处理完后的目录如下:


简单介绍一下:

  • ViewController

    • LSCircleListViewController : 界面主控制器,负责跳转、Navgation、TabBar等

  • View

    • LSCircleListView : 界面主View,负责主要界面的显示

    • LSCircleListHeaderView : 头部Header,封装的内部含有一个CollectionView

    • LSCircleListCollectionCell : 头部Header中的CollectionView自定义的Cell

    • LSCircleListSectionHeaderView : SectionView,此界面不需复用,所以单纯一个View即可,若需要复用需要TableViewHeaderFooterView

    • LSCircleListTableCell : 主TableView的Cell

  • ViewModel

    • LSCircleListViewModel : 界面主ViewModel

    • LSCircleListHeaderViewModel : 头部Header对应的ViewModel

    • LSCircleListCollectionCellViewModel : 头部CollectionCell及TableViewCell的ViewModel(因为二者的数据结构是一致的)

    • LSCircleListSectionHeaderViewModel : Section的ViewModel

  • Model

    • LSCircleListModel : 圈子的数据模型(header和tableViewCell数据结构是一致的)

一个小小的界面这么多类...是不是难以接受了,淡定些,骚年!你要想想把这些个东西都放在VC内是个什么赶脚?也得好几千行呢!(有点夸张!不过也够头疼的),这么多类,这里着重讲一下主VC、主V、主VM、主M就ok,能详细讲明白MVVM之间是如何工作的就一通百通了。

1、LSCircleListViewController的处理

先上代码:

////  LSCircleListViewController.m//  ZhongShui////  Created by 王隆帅 on 16/3/10.//  Copyright © 2016年 王隆帅. All rights reserved.//#import "LSCircleListViewController.h"#import "LSCircleListView.h"#import "LSCircleListViewModel.h"#import "LSCircleMainPageViewController.h"#import "LSCircleMainPageViewModel.h"#import "LSCircleListCollectionCellViewModel.h"#import "LSNewCircleListViewController.h"@interfaceLSCircleListViewController ()@property (nonatomic, strong) LSCircleListView *mainView;@property (nonatomic, strong) LSCircleListViewModel *viewModel;@end@implementationLSCircleListViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view.}#pragma mark - system- (void)updateViewConstraints {    WS(weakSelf)    [self.mainView mas_makeConstraints:^(MASConstraintMaker *make) {        make.edges.equalTo(weakSelf.view);    }];    [super updateViewConstraints];}#pragma mark - private- (void)yc_addSubviews {    [self.view addSubview:self.mainView];}- (void)yc_bindViewModel {    @weakify(self);    [[self.viewModel.cellClickSubject takeUntil:self.rac_willDeallocSignal] subscribeNext:^(LSCircleListCollectionCellViewModel *viewModel) {        @strongify(self);        LSCircleMainPageViewModel *mainViewModel = [[LSCircleMainPageViewModel alloc] init];        mainViewModel.headerViewModel.circleId = viewModel.idStr;        mainViewModel.headerViewModel.headerImageStr = viewModel.headerImageStr;        mainViewModel.headerViewModel.title = viewModel.name;        mainViewModel.headerViewModel.numStr = viewModel.peopleNum;        LSCircleMainPageViewController *circleMainVC = [[LSCircleMainPageViewController alloc] initWithViewModel:mainViewModel];        [self.rdv_tabBarController setTabBarHidden:YES animated:YES];        [self.navigationController pushViewController:circleMainVC animated:YES];    }];    [self.viewModel.listHeaderViewModel.addNewSubject subscribeNext:^(id x) {        @strongify(self);        LSNewCircleListViewController *newCircleListVC = [[LSNewCircleListViewController alloc] init];        [self.rdv_tabBarController setTabBarHidden:YES animated:YES];        [self.navigationController pushViewController:newCircleListVC animated:YES];    }];}- (void)yc_layoutNavigation {    self.title = @"圈子列表";    [self.rdv_tabBarController setTabBarHidden:NO animated:YES];}#pragma mark - layzLoad- (LSCircleListView *)mainView {    if (!_mainView) {        _mainView = [[LSCircleListView alloc] initWithViewModel:self.viewModel];    }    return _mainView;}- (LSCircleListViewModel *)viewModel {    if (!_viewModel) {        _viewModel = [[LSCircleListViewModel alloc] init];    }    return _viewModel;}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {    // Get the new view controller using [segue destinationViewController].    // Pass the selected object to the new view controller.}*/@end

对于VC,分为三个模块,下面分别来说一下:

i 第一个模块:系统函数


此函数是从iOS6.0开始在ViewController中新增一个更新约束布局的方法,这个方法默认的实现是调用对应View的 updateConstraints 。ViewController的View在更新视图布局时,会先调用ViewController的updateViewConstraints 方法。我们可以通过重写这个方法去更新当前View的内部布局,而不用再继承这个View去重写-updateConstraints方法。我们在重写这个方法时,务必要调用 super 或者 调用当前View的 -updateConstraints 方法。

ⅱ 第二个模块 : 私有函数


前面基类内也提到了这三个函数的具体作用,即

  • yd_addSubviews : 添加View到ViewController

  • yd_bindViewModel : 这里绑定了两个跳转事件。

  • yd_layoutNavigation : 设置了标题为“圈子列表”、及TabBar不隐藏

ⅲ 第三个模块 : 懒加载


这就不用解释了,用到时再加载。

2、View的处理

先上代码

////  LSCircleListView.m//  ZhongShui////  Created by 王隆帅 on 16/3/10.//  Copyright © 2016年 王隆帅. All rights reserved.//#import "LSCircleListView.h"#import "LSCircleListViewModel.h"#import "LSCircleListHeaderView.h"#import "LSCircleListSectionHeaderView.h"#import "LSCircleListTableCell.h"@interfaceLSCircleListView () <UITableViewDataSource, UITableViewDelegate>@property (strong, nonatomic) LSCircleListViewModel *viewModel;@property (strong, nonatomic) UITableView *mainTableView;@property (strong, nonatomic) LSCircleListHeaderView *listHeaderView;@property (strong, nonatomic) LSCircleListSectionHeaderView *sectionHeaderView;@end@implementationLSCircleListView/* // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. - (void)drawRect:(CGRect)rect { // Drawing code } */#pragma mark - system- (instancetype)initWithViewModel:(id<YCViewModelProtocol>)viewModel {    self.viewModel = (LSCircleListViewModel *)viewModel;    return [super initWithViewModel:viewModel];}- (void)updateConstraints {    WS(weakSelf)    [self.mainTableView mas_makeConstraints:^(MASConstraintMaker *make) {        make.edges.equalTo(weakSelf);    }];    [super updateConstraints];}#pragma mark - private- (void)yc_setupViews {    [self addSubview:self.mainTableView];    [self setNeedsUpdateConstraints];    [self updateConstraintsIfNeeded];}- (void)yc_bindViewModel {    [self.viewModel.refreshDataCommand execute:nil];    @weakify(self);    [self.viewModel.refreshUI subscribeNext:^(id x) {        @strongify(self);        [self.mainTableView reloadData];    }];    [self.viewModel.refreshEndSubject subscribeNext:^(id x) {        @strongify(self);        [self.mainTableView reloadData];        switch ([x integerValue]) {            case LSHeaderRefresh_HasMoreData: {                [self.mainTableView.mj_header endRefreshing];                if (self.mainTableView.mj_footer == nil) {                    self.mainTableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{                        @strongify(self);                        [self.viewModel.nextPageCommand execute:nil];                    }];                }            }                break;            case LSHeaderRefresh_HasNoMoreData: {                [self.mainTableView.mj_header endRefreshing];                self.mainTableView.mj_footer = nil;            }                break;            case LSFooterRefresh_HasMoreData: {                [self.mainTableView.mj_header endRefreshing];                [self.mainTableView.mj_footer resetNoMoreData];                [self.mainTableView.mj_footer endRefreshing];            }                break;            case LSFooterRefresh_HasNoMoreData: {                [self.mainTableView.mj_header endRefreshing];                [self.mainTableView.mj_footer endRefreshingWithNoMoreData];            }                break;            case LSRefreshError: {                [self.mainTableView.mj_footer endRefreshing];                [self.mainTableView.mj_header endRefreshing];            }                break;            default:                break;        }    }];}#pragma mark - lazyLoad- (LSCircleListViewModel *)viewModel {    if (!_viewModel) {        _viewModel = [[LSCircleListViewModel alloc] init];    }    return _viewModel;}- (UITableView *)mainTableView {    if (!_mainTableView) {        _mainTableView = [[UITableView alloc] init];        _mainTableView.delegate = self;        _mainTableView.dataSource = self;        _mainTableView.backgroundColor = GX_BGCOLOR;        _mainTableView.separatorStyle = UITableViewCellSeparatorStyleNone;        _mainTableView.tableHeaderView = self.listHeaderView;        [_mainTableView registerClass:[LSCircleListTableCell class] forCellReuseIdentifier:[NSString stringWithUTF8String:object_getClassName([LSCircleListTableCell class])]];        WS(weakSelf)        _mainTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{            [weakSelf.viewModel.refreshDataCommand execute:nil];        }];        _mainTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{            [weakSelf.viewModel.nextPageCommand execute:nil];        }];    }    return _mainTableView;}- (LSCircleListHeaderView *)listHeaderView {    if (!_listHeaderView) {        _listHeaderView = [[LSCircleListHeaderView alloc] initWithViewModel:self.viewModel.listHeaderViewModel];        _listHeaderView.frame = CGRectMake(0, 0, SCREEN_WIDTH, 160);    }    return _listHeaderView;}- (LSCircleListSectionHeaderView *)sectionHeaderView {    if (!_sectionHeaderView) {        _sectionHeaderView = [[LSCircleListSectionHeaderView alloc] initWithViewModel:self.viewModel.sectionHeaderViewModel];    }    return _sectionHeaderView;}#pragma mark - delegate#pragma mark - UITableViewDataSource- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {    return1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    returnself.viewModel.dataArray.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    LSCircleListTableCell *cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithUTF8String:object_getClassName([LSCircleListTableCell class])] forIndexPath:indexPath];    if (self.viewModel.dataArray.count > indexPath.row) {        cell.viewModel = self.viewModel.dataArray[indexPath.row];    }    return cell;}#pragma mark - UITableViewDelegate- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {    return100;}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {    if (self.viewModel.dataArray.count > indexPath.row) {        [self.viewModel.cellClickSubject sendNext:self.viewModel.dataArray[indexPath.row]];    }}- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {    returnself.sectionHeaderView;}- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {    return45;}@end

主View分为四个模块:

ⅰ 第一个模块 : 系统函数


每个View都会有对应的ViewModel,这样也更易复用,这里因为是主View,一般而言我都会使得VC和主V共用一个VM,这样对于跳转、数据共享等都有着极大的好处。

ⅱ 第二个模块 : 私有函数



具体作用途中已经标注,需要注意的是这些对于不同数据的处理,是我自己写的,逻辑上肯定没有那么缜密,仅供参考。

ⅲ 第三个模块 : 懒加载


这里没啥好说的,就是用的MJRefresh这个第三方库做的刷新。不过,假如你细心的话肯定会发现下面那两个View都是用VM来配置初始化的,这个和主View的配置初始化的意义是一样的。

ⅳ 第四个模块 : 代理及数据源


其中使用的是自定义Cell,用ViewModel来配置,点击事件也是和之前的VC的跳转联系起来了,并将VM传过去。

3、LSCircleListModel的处理

同样,先上代码

////  LSCircleListModel.h//  ZhongShui////  Created by 王隆帅 on 16/3/17.//  Copyright © 2016年 王隆帅. All rights reserved.//#import <Foundation/Foundation.h>@interfaceLSCircleListModel : NSObject@property (nonatomic, copy) NSString *idStr;@property (nonatomic, copy) NSString *title;@property (nonatomic, copy) NSString *intro;@property (nonatomic, copy) NSString *img;@property (nonatomic, copy) NSString *memberCount;@property (nonatomic, copy) NSString *topicCount;@end////  LSCircleListModel.m//  ZhongShui////  Created by 王隆帅 on 16/3/17.//  Copyright © 2016年 王隆帅. All rights reserved.//#import "LSCircleListModel.h"@implementationLSCircleListModel+ (NSDictionary *)mj_replacedKeyFromPropertyName {    return  @{              @"idStr":@"id",              @"title":@"title",              @"intro":@"intro",              @"img":@"img",              @"memberCount":@"MemberCount",              @"topicCount":@"TopicCount",              };}@end

这个就不贴图介绍了,就是单纯的数据模型,使用了MJExtention这个数据模型转换框架。没有做任何其他的逻辑处理。

4、ViewModel的处理////  LSCircleListViewModel.h//  ZhongShui////  Created by 王隆帅 on 16/3/10.//  Copyright © 2016年 王隆帅. All rights reserved.//#import "YCViewModel.h"#import "LSCircleListHeaderViewModel.h"#import "LSCircleListSectionHeaderViewModel.h"@interfaceLSCircleListViewModel : YCViewModel@property (nonatomic, strong) RACSubject *refreshEndSubject;@property (nonatomic, strong) RACSubject *refreshUI;@property (nonatomic, strong) RACCommand *refreshDataCommand;@property (nonatomic, strong) RACCommand *nextPageCommand;@property (nonatomic, strong) LSCircleListHeaderViewModel *listHeaderViewModel;@property (nonatomic, strong) LSCircleListSectionHeaderViewModel *sectionHeaderViewModel;@property (nonatomic, strong) NSArray *dataArray;@property (nonatomic, strong) RACSubject *cellClickSubject;@end////  LSCircleListViewModel.m//  ZhongShui////  Created by 王隆帅 on 16/3/10.//  Copyright © 2016年 王隆帅. All rights reserved.//#import "LSCircleListViewModel.h"#import "LSCircleListCollectionCellViewModel.h"#import "LSCircleListModel.h"@interfaceLSCircleListViewModel ()@property (nonatomic, assign) NSInteger currentPage;@end@implementationLSCircleListViewModel- (void)yc_initialize {    @weakify(self);    [self.refreshDataCommand.executionSignals.switchToLatest subscribeNext:^(NSDictionary *dict) {        @strongify(self);        if (dict == nil) {            [self.refreshEndSubject sendNext:@(LSRefreshError)];            ShowErrorStatus(@"网络连接失败");            return;        }        if ([dict[@"status"] integerValue] == 0) {            self.listHeaderViewModel.dataArray = [[[([(NSDictionary *)dict[@"res"] arrayForKey:@"JoinCircles"]).rac_sequence map:^id(NSDictionary *dic) {                LSCircleListModel *model = [LSCircleListModel mj_objectWithKeyValues:dic];                LSCircleListCollectionCellViewModel *viewModel = [[LSCircleListCollectionCellViewModel alloc] init];                viewModel.model = model;                return viewModel;            }] array] mutableCopy];            self.dataArray = [[[([(NSDictionary *)dict[@"res"] arrayForKey:@"Circles"]).rac_sequence map:^id(NSDictionary *dic) {                LSCircleListModel *model = [LSCircleListModel mj_objectWithKeyValues:dic];                LSCircleListCollectionCellViewModel *viewModel = [[LSCircleListCollectionCellViewModel alloc] init];                viewModel.model = model;                return viewModel;            }] array] mutableCopy];            [self ls_setHeaderRefreshWithArray:dict[@"Circles"]];            [self ls_dismiss];        } else {            [self.refreshEndSubject sendNext:@(LSRefreshError)];            ShowMessage(dict[@"mes"]);        }            }];    [[[self.refreshDataCommand.executing skip:1] take:1] subscribeNext:^(id x) {        @strongify(self);        if ([x isEqualToNumber:@(YES)]) {            [self ls_showWithStatus:@"正在加载"];        }    }];    [self.nextPageCommand.executionSignals.switchToLatest subscribeNext:^(NSDictionary *dict) {        @strongify(self);        if (dict == nil) {            [self.refreshEndSubject sendNext:@(LSRefreshError)];            ShowErrorStatus(@"网络连接失败");            return;        }        if ([dict[@"status"] integerValue] == 0) {            NSMutableArray *recommandArray = [[NSMutableArray alloc] initWithArray:self.dataArray];            for (NSDictionary *subDic in [(NSDictionary *)dict[@"res"] arrayForKey:@"Circles"]) {                LSCircleListModel *model = [LSCircleListModel mj_objectWithKeyValues:subDic];                LSCircleListCollectionCellViewModel *viewModel = [[LSCircleListCollectionCellViewModel alloc] init];                viewModel.model = model;                [recommandArray addObject:viewModel];            }            self.dataArray = recommandArray;            [self ls_setFootRefreshWithArray:dict[@"Circles"]];            [self ls_dismiss];        } else {            [self.refreshEndSubject sendNext:@(LSRefreshError)];            ShowMessage(dict[@"mes"]);        }    }];}#pragma mark - private- (NSMutableDictionary *)requestCircleListWithId:(NSString *)idStr currentPage:(NSString *)currentPage {    idStr = IF_NULL_TO_STRING(idStr);    currentPage = IF_NULL_TO_STRING(currentPage);    NSMutableDictionary * dict = [@{@"MemberID": idStr, @"pageSize": LS_REQUEST_LIST_COUNT, @"pageIndex":currentPage} mutableCopy];    return dict;}- (void)ls_setFootRefreshWithArray:(NSArray *)array {    if (array.count < LS_REQUEST_LIST_NUM_COUNT) {        [self.refreshEndSubject sendNext:@(LSFooterRefresh_HasNoMoreData)];    } else {        [self.refreshEndSubject sendNext:@(LSFooterRefresh_HasMoreData)];    }}- (void)ls_setHeaderRefreshWithArray:(NSArray *)array {    if (array.count < LS_REQUEST_LIST_NUM_COUNT) {        [self.refreshEndSubject sendNext:@(LSHeaderRefresh_HasNoMoreData)];    } else {        [self.refreshEndSubject sendNext:@(LSHeaderRefresh_HasMoreData)];    }}#pragma mark - lazyLoad- (RACSubject *)refreshUI {    if (!_refreshUI) {        _refreshUI = [RACSubject subject];    }    return _refreshUI;}- (RACSubject *)refreshEndSubject {    if (!_refreshEndSubject) {        _refreshEndSubject = [RACSubject subject];    }    return _refreshEndSubject;}- (RACCommand *)refreshDataCommand {    if (!_refreshDataCommand) {        @weakify(self);        _refreshDataCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {            @strongify(self);            return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {                @strongify(self);                self.currentPage = 1;                [self.request POST:LS_URL_CIRCLE_MEMBER_LIST parameters:[self requestCircleListWithId:@"1" currentPage:[NSString stringWithFormat:@"%d",self.currentPage]] success:^(CMRequest *request, NSString *responseString) {                    NSDictionary *dict = [responseString objectFromJSONString];                    [subscriber sendNext:dict];                    [subscriber sendCompleted];                } failure:^(CMRequest *request, NSError *error) {                    ShowErrorStatus(@"网络连接失败");                    [subscriber sendCompleted];                }];                returnnil;            }];        }];    }    return _refreshDataCommand;}- (RACCommand *)nextPageCommand {    if (!_nextPageCommand) {        @weakify(self);        _nextPageCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {            @strongify(self);            return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {                @strongify(self);                self.currentPage ++;                [self.request POST:LS_URL_CIRCLE_TOPIC_LIST parameters:nil success:^(CMRequest *request, NSString *responseString) {                    NSDictionary *dict = [responseString objectFromJSONString];                    [subscriber sendNext:dict];                    [subscriber sendCompleted];                } failure:^(CMRequest *request, NSError *error) {                    @strongify(self);                    self.currentPage --;                    ShowErrorStatus(@"网络连接失败");                    [subscriber sendCompleted];                }];                returnnil;            }];        }];    }    return _nextPageCommand;}- (LSCircleListHeaderViewModel *)listHeaderViewModel {    if (!_listHeaderViewModel) {        _listHeaderViewModel = [[LSCircleListHeaderViewModel alloc] init];        _listHeaderViewModel.title = @"已加入的圈子";        _listHeaderViewModel.cellClickSubject = self.cellClickSubject;    }    return _listHeaderViewModel;}- (LSCircleListSectionHeaderViewModel *)sectionHeaderViewModel {    if (!_sectionHeaderViewModel) {        _sectionHeaderViewModel = [[LSCircleListSectionHeaderViewModel alloc] init];        _sectionHeaderViewModel.title = @"推荐圈子";    }    return _sectionHeaderViewModel;}- (NSArray *)dataArray {    if (!_dataArray) {        _dataArray = [[NSArray alloc] init];    }    return _dataArray;}- (RACSubject *)cellClickSubject {    if (!_cellClickSubject) {        _cellClickSubject = [RACSubject subject];    }    return _cellClickSubject;}@end

ViewModel也是分为三个模块,由于代码太多摘重要的讲

ⅰ 第一个模块 : 处理数据、逻辑模块


处理数据这块,先用字典转为Model,在用Model配置ViewModel,ViewModel再去与UI及其逻辑对应。

ⅱ 第二个模块 : 私有函数


对于请求参数字典,可以放在VM中,便于模块化移植,也可以放在公共API中便于管理,看个人选择了,没有绝对的好位置,只有更适合个人的位置。

另外两个函数就是处理下拉及上拉时有没有更多数据的私有函数。

ⅲ 第三个模块 : 懒加载


此数据请求用的是AFNetworking。

5、APPDelegate的代码简化

一般而言,我们正式项目中会遇到很多需要启动项目时就加载的,所以很快APPDelegate就会越来越庞大,既然其他的代码都简化解耦了,这里也可以做一下处理。

目录如下:


简化后的AppDelegate如下:


其他代码存放的位置如下:


当类对象被引入项目时, runtime 会向每一个类对象发送 load 消息. load 方法还是非常的神奇的, 因为它会在每一个类甚至分类被引入时仅调用一次, 调用的顺序是父类优先于子类, 子类优先于分类. 而且 load 方法不会被类自动继承, 每一个类中的 load 方法都不需要像 viewDidLoad 方法一样调用父类的方法。

这是利用了这个算是黑魔法的玩意,哈哈,就简化了APPDelegate!

四、后记

当初本来想干掉基类来着,想利用Category + Protocol并利用Runtime的Methode Swizzle 来给系统函数添加自己的私有函数,当初VC已经搞定了,然而发现这样牵涉面太广,你对VC做了Category,UINavigationController 也会受到影响,假如你对View做了Category,其他继承View的也会有影响,而且当时交换方法都是在一个Category里管事,到第二个就覆盖了。。。不造为啥,因为知道这条路走不通就没继续搞下去了。。。

写到这里,大家应该都对我笔下的架构模式有了一些了解,因为里面涉及的东西确实太多,主要是这些玩意需要站在巨人的肩膀,遇到文中没有提到而且不懂得可以:


哈哈哈!别怪我...不是我不负责,因为你可以看看写到这里篇幅已经超出常人所能接受的了,而且我感觉我把各个细节已经都照顾到了吧(๑乛◡乛๑ 磨人的小妖精)!大家有什么疑惑我们可以在评论区交流!

最后,真的很希望各位大神指出不足的地方,能让大家共同进步!

五、Demo已出(动动你的手指,赞一下撒!)

代码地址:https://github.com/wanglongshuai/MVVM-RAC-Demo


走过岁月......
为了从 Linux 服务器榨取...

为了从 Linux 服务器榨取尽可能多的性能,需要了解如何更改 I/O 调度器以满足你的需求。

为了从 Linux 服务器榨取尽可能多的性能,需要了解如何更改 I/O 调度器以满足你的需求。

女生长胡子

迅雷看看xmp是什么?

  迅雷看看播放器其主历程为XMP.exe,罕见谬误与衰行有摩擦,缓存节目为Kankan,能够用户自界说缓存节目。   依托迅雷的壮大资源的支撑,迅雷出的播放器遭到了各大用户的喜欢。 。巨片热映和典范回放中也需要了丰衰的大片和典范片子两台电脑怎么传文件。   虽然上个读物已将“迅雷影音”更名为“迅雷看看播放器”但其实正正在定然水平上迅雷看看首页的片子没有能及时的正正在迅雷看看播放器中显现,而本次复旧后及时的处理了这一难点。   内中迅雷影院引荐了播放的近200部大片,以影院大厅的方式,无比新颖,指导用户收看。   翻开硬件,出现正正在用户长远的即是全新整合的多性能播放模块,包括“外地播放”、...

  迅雷看看播放器其主历程为XMP.exe,罕见谬误与衰行有摩擦,缓存节目为Kankan,能够用户自界说缓存节目。   依托迅雷的壮大资源的支撑,迅雷出的播放器遭到了各大用户的喜欢。 。巨片热映和典范回放中也需要了丰衰的大片和典范片子两台电脑怎么传文件。   虽然上个读物已将“迅雷影音”更名为“迅雷看看播放器”但其实正正在定然水平上迅雷看看首页的片子没有能及时的正正在迅雷看看播放器中显现,而本次复旧后及时的处理了这一难点。   内中迅雷影院引荐了播放的近200部大片,以影院大厅的方式,无比新颖,指导用户收看。   翻开硬件,出现正正在用户长远的即是全新整合的多性能播放模块,包括“外地播放”、“果实资料”、“IRL地点”。选中某部影片,通太长时光的缓冲后即可流利观看,一看事实。   全体而言,果实资料播放及URL地点播放,这两项性能是地道的亮点,先来看BT资料播放,当用户占有一度BT果实资料的时,即可间接用迅雷看看播放器停止调取运用。   XMP为XunleiMediaPlayer电脑开不了机怎么办的简写。外地播放望文生义,即播放外地电脑上的传媒资料;果实播放是才整合出来的性能;URL地点播放即是咱们能够将视频中的RUL地点间接增添进出来停止播放。   迅雷看看播放器,即原迅雷影音。 凡是作品内未标点起源均为原作品品!恭候您的看法 连载时请说明:连载自《计算机培修技能网》原文地点:      使用迅雷看看播放器的另一度益处及时播放无海报,本人都晓得,正正在使用主页上的迅雷看看停止片子播放时,屡屡都要阅历长达几多十秒的海报,非常的烦人,使用迅雷看看播放器即会间接跳过这小半,该当说这点做的非常的兽性化。迅雷影音是迅雷公司旗下的一款传媒播放器,正正在推出到3.0版后正式更名为“迅雷看看播放器”,然后正正在内中退出了迅雷的抢手网上正正在线影院零碎“迅雷看看”,将迅雷看看由一度主页插件改变为硬件实业化,堪称是相等的精彩。迅雷看看既能够正正在线观看迅雷的正正在线视频资源,又能够支撑外地资源的播放,况且正正在视频体例上底子上支撑一切体例的视频资料的播放。   以往的播放器,高低的调理但是正正在0-100之间,而作者所接触的几多款中,前后都退出了更多的比重调音零碎,QQ影音就是内中的一款,QQ影音能够将声响由0缩减至1000%。   4、完成同步   本次复旧后,迅雷影音也退出了这一性能,成效还是没有错的。那样顺便当了用户,再也没有必装若干少个播放器了。   3、高低增大   可以使用迅雷看看播放器的颜色调理性能完成片子的“明暗度、比照度、饱满度”的调理,那里作者给本人分享一度成心思的调理形式,将饱满度降至最低,任何有颜色片子都会霎时变为黑红色,让用户享用原汁原味的规矩电影!   2、颜色调理   RM/RMVB/WMV/WMA/ASF/AVI/MP3/MP4/MPEG/MKV/MOV/TS   硬件支撑的正正在线播放体例也很多的:   接上往即是URL的播放,还差错常的壮大的,实正在原理同BT资料键进一样,都是经过边看边下的形式停止的。影视搜寻更是需要了容易快捷的搜寻性能,让你为所欲为地想看什么看什么。为玩dnf电脑配置了视频版权成绩,其正正在线播放视频后的缓存体例为.xv,况且只能用迅雷看看播放。   迅雷看看播放器蕴含了由迅雷看看需要的电影、电视机剧、动漫、综艺、大片等丰衰的影视资源,约有上上万时辰的视频形式,并且正正正在延续复旧,是一度宏大的资源库。该硬件更好地整合了迅雷主页看看的特点,支撑外地播放与正正在线视频点播,一直完善的用户交互和正正在线货物经验,让用户的任务与生涯充溢生趣。迅雷看看播放器(原迅雷影音{xx中关村在线电脑xx电脑麦克风}),更好地整合了迅雷主页看看的特点,支撑外地播放与正正在线视频点播,一直完善的用户交互和正正在线货物经验,会员能够守旧减速性能,装置后主动生成节目XMP4资料夹。   1、正正在线视频       11.性能快速键安装   10关于播放记载支撑多种记载、电脑自动关机设置肃清形式安装   9.播放终了后主动关灯安装   8.主动增添类似资料到播放列表安装   7.播放片子时关于播放器显现正正在银幕最前者的配置项   6.主动提醒片子复旧   5.主动记载上回开电脑启动不了放播放器时的资料地位   4.播放完片子后的片子引荐(看看猜你喜爱)   3.主动正正在线键进片子字幕   2.兼容支流影视传媒体例资料的外地播放   1.丰衰的片子库正正在线流利点播效劳   迅雷看看播放器采纳了迅雷保守的多资源超线程技能,真正完成了越多人看越流利的成效。有了迅雷看看播放器,让你享用质量上乘量的听觉国宴,微微松松看遍巨片大片,再也无须忍耐键进期待的郁闷,是空阔影视迷的知音。   迅雷看看是一款立即流利播放高清正正在线片子的存户端硬件。没有会象其余的正正在线影视观看硬件,断断续续地播放,毫无享用可言。
中医治疗疤痕疙瘩

部手机收没有到短信考证码怎样回事?

凡是作品内未标点起源均为原作品品!恭候您的不雅点 连载时请道明:连载自《计算机培修技能网》原文地点: 安装好后插手该当就能够收到短疑了,我接触的部手机用那样的办法都处理了某个收没有到短疑的成绩,假设还是没有行那正在重启一下手机试试,都没有行的话那约莫就是其余成绩招致的了,指望能对于自己有所协助,谢谢。 将上图银幕划到上面的安装首选网络类型,正在下拉菜单中弃取GSM only如次图所示: 正在涌现的画面咱们弃取部手机消息电压低电脑自动重启点出来会涌现如次画面: 率先咱们翻开拨号盘输出*#*#4636#*#*会主组装电脑价格动涌现如次画面: 该当少数智强人机都能用这种办法处理,由于我身边的冤家的...

凡是作品内未标点起源均为原作品品!恭候您的不雅点 连载时请道明:连载自《计算机培修技能网》原文地点: 安装好后插手该当就能够收到短疑了,我接触的部手机用那样的办法都处理了某个收没有到短疑的成绩,假设还是没有行那正在重启一下手机试试,都没有行的话那约莫就是其余成绩招致的了,指望能对于自己有所协助,谢谢。 将上图银幕划到上面的安装首选网络类型,正在下拉菜单中弃取GSM only如次图所示: 正在涌现的画面咱们弃取部手机消息电压低电脑自动重启点出来会涌现如次画面: 率先咱们翻开拨号盘输出*#*#4636#*#*会主组装电脑价格动涌现如次画面: 该当少数智强人机都能用这种办法处理,由于我身边的冤家的部手机我都用这种办法帮他们处理了,然而我没有敢道一切的智能机都能处理,某个还要看是什么启事招致的了,没有过自己能够试试。  成绩1:有缘无端出成绩 。关于某个成绩,能够正在部手机消息安装中将部怎样看电脑配置手机短疑核心记号安装正确,而后一定就能够处理成绩,详细办法能够征采参照百度经历。或者许是其余中央,然而有疑号屏障的仪表,屏障掉了部手机疑号,因为临时无奈收到消息,只需改不雅地位,去疑号好的中央,做作就可以收到没有收到的短疑了。为了本经历没有负担,仔细的刷机教程请征采参考百度经历“安卓部手机刷机怎么刷(最新版)”。这种状况能够是最近终止了共性化的安装,更改了一些零碎设定,因为进下手机安装,而后点击“备份和重置”。(某个是部手机正在3G网络下涌现的,咱们把部手机调到2维修电脑G网络就能够了) 没有到万没有得已,约莫自己都没有想刷机,然而刷机很容易,多少秒钟就能够搞定。 成绩4:短疑核心记号安装 这种状况正常正在非智能机中较为罕见,认为非智能机部手机贮存正常无限,许多短疑默以为销毁的部手机卡中,而部手机卡的贮存威力较小,因为正常简单满。 成绩2:部手机欠费 这种状况是,前些生活都好好的,骤然就收没有到短疑了,本人又没有对于部手机做过什么异样的操作,就涌现了某个成绩,关于这种状况,正常没有是部手机坏了,而是经营商效劳器那里的小成绩,网络提早之类形成,而至使电您的部手机网络经营商务台如挪动\w+([-+.]\w+)*@\w+([-.]\w电脑不断重启+)*\.\w+([-.]\w+)*<<|*|>>[a-zA-z]+://[^\s]*<<|*|>>,电疑\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<<|*|>>[a-zA-z]+://[^\s]*<<|*|>> 、联通\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<<|*|>>[a-zA-z]+://[^\s]*<<|*|>>等转接到野见效劳,注明您的状况,他们不一会儿就解决好了。那时分需求删掉一全体短疑或者许是其余占外存的货色。现正在欠费了正常没有会间接断掉您的部手机电话和短疑性能,因为,收没有到短疑的时分想想经营商是没有是发短疑催交话费而没有交了。刷机道白了就是给部手机从新装置零碎,这次要对准于智能机,非智能机的话下面的办法都没有处理到成绩,就能够到部手机培修单位培修或者许换一台新的。 成绩6:部手机安装成绩 当您处正在隧道、矿井、深山、人电脑突然黑屏烟稀疏的中央时,疑号正常很差,部手机无奈收到短疑。 成绩7:安装了黑名单和消息阻拦 正在备份和重置窗口中,点击“安装重设”,那样一切的部手机零碎安装就会前去到出界安装,然而没有会迷失数据。某个能处理成绩,还是比较现实的状况。 这种状况是,这个时分没有不慎更改了部手机的这个安装,招致怎么看电脑显卡部手机没有可以收到短疑。 成绩3:部手机贮存已满 某个是最根本的成绩了,现正在部手机正常都会评疑誉头衔,假设疑誉头衔高的,可以欠费的金额就越大,疑誉头衔又依据本人缴费的及时与否挂钩。 成绩8:部手机软件/零碎成绩 现正在智强人机比较便当,然而一些渣滓消息时常侵略用户,用户没有得没有终止黑名单安装,然而有些时分没有留意,安装选项中全体安装没有彻底依照本人的意义更改,以致消息被阻拦,因为需求去掉黑名单阻拦,详细办法可征采参考百度经历“怎么把部手机通疑录黑名单拉进去”。 成绩5:错场所处位相疑号差 收没有到短疑,能够还是部手机短疑核心记号安装涌现了成绩。便可。
女生长胡子

计算机显现器有水涟漪是什么缘由呢?

  路线接口针成绩:   显现器和显卡之间的联接线。显现器缺少白色的成绩搅扰了我很久,我应用了下面一切的方法都没有处理失落,最初一次正在群里聊地利,老田同志让我看看是没有是显卡接口处的针断了。形成显现器软件成绩的缘由很多,如显像管老化,所处条件湿润招致路线氧化、静电等都会形成色彩显现没有畸形。最为罕见的能够是笔记簿接上电源会颤动,而没有接电源则没事。正在劣质机箱上没有可疏忽长机缘由,比方走线没有佳引导搅扰。如显卡的类型和驱动类型对于应没有分歧,读物没有分歧等。实在即便没有驱动,显现器也会准确地显现每种色彩的,没有至于涌现迷失元色的情况,然而假如驱动装置没有准确却有能够涌现某个成绩。假如是台式...

  路线接口针成绩:   显现器和显卡之间的联接线。显现器缺少白色的成绩搅扰了我很久,我应用了下面一切的方法都没有处理失落,最初一次正在群里聊地利,老田同志让我看看是没有是显卡接口处的针断了。形成显现器软件成绩的缘由很多,如显像管老化,所处条件湿润招致路线氧化、静电等都会形成色彩显现没有畸形。最为罕见的能够是笔记簿接上电源会颤动,而没有接电源则没事。正在劣质机箱上没有可疏忽长机缘由,比方走线没有佳引导搅扰。如显卡的类型和驱动类型对于应没有分歧,读物没有分歧等。实在即便没有驱动,显现器也会准确地显现每种色彩的,没有至于涌现迷失元色的情况,然而假如驱动装置没有准确却有能够涌现某个成绩。假如是台式计算机且应用了金鸡独立显卡,显卡松动或者保护都会形成银幕颤动景象。这时你更换联接线就OK了;   5、显卡成绩。提议送修。   显卡的驱动没有装好。那样我们就从这零点逐一来说吧。显卡电脑桌面壁纸高清唯美上一切的色彩消息都是时常一条数据线传送到显现器上的,假如那里出了成绩则也会惹起三元色缺失或者许色彩没有畸形。这正常正在轻工业用水上较易涌现,你只要要更换一度电源适配重或者将电源插销的天线剪失落即可;   “计算机显现器有水涟漪是什么缘由呢?”,有网友讯问小编某个成绩,因为小编小结了计算机显现器有水涟漪颤动的有关消息,现正在分享给自己。因为能够思忖换一根线试试。同声也能检测能否是长机的成绩。这是咱最没有想看到的,但假如你经过之上办法都没有处理,且更换其它显现器就OK,则该当审查下能否显现器老化了;   6、驱动没有对于。   至于锚缆成绩,某个成绩要说的比拟多,并且现正在显现器都支撑多种显现数据线,成效也是没有一样的   显现器色彩没有畸形的缘由有很多,正常情况下分成显现器毛病,显现器的数据锚缆信号的传输品质差,长机显卡三年夜类,判别办法是先将显现器搁置到其余的长机上终止测试,并更换锚缆。那样的成绩处理兴起很容易,把原部份显卡驱动卸载重新装置即可。这时只要要插紧或者更换显现该当就OK了;   4、区分率没有对于。假如成绩照旧则注明很有能够是显现器本身的毛病了,而液晶面板的寿数是很长的,因而是显现器外面的灯管老化收回光没有正了招致的。      9、显现器老化。我把数据线拔上来审查,果没有其然,内中一根针重年夜蜿蜒,并没有拔出到针孔里来。缘由一是背阴灯老化或者保护,二是低压板顺变线圈层间有击穿的中央。假如软件驱动没有对于,也易涌现此成绩。 凡是是作品内未标点起源均为原作品品!恭候您的看法 连载时请申明:连载自《计算机培修技能网》原文地点:   正在网上上看到很多人都遇到显现器色彩没有畸形,或者许缺少红、绿、蓝三元色中的一种的成绩,然而处理方法年夜致就这样多少种   这是我遇到的成绩。   正在液晶显现器的通路中,银幕涌现闪耀的景象只与背阴灯和低压板相关系。依据没有同的缘由采取没有同的办法即可,如将显现器置于透风处等(很多人喜爱给显现器蒙一块布来防尘,那里提示自己的是,防尘要用公用的防尘罩,要没有能够会招致显现器透风散热没有畅)。关于卡槽没有严密的成绩能够拔电脑硬盘分区上来重插,有时能够是由于污垢较多,那里需求清算一下插槽并用镇纸等机器清算显现卡。相似卡槽接触没有严密、显卡过热、显卡路线与部件成绩等。关于显卡过热,则能够下面装置一度小电扇或者许把机箱搁置透风处,显卡过热形成的色彩没有畸形常常是刚刚开机的时分比拟畸形,应用一段工夫当前开端走色。从你形容的景象看该当是背阴灯发动艰难形成的。   接报成绩:   显现成绩是最时常涌现的成绩。某个成绩能够经过更换长机测试,最好的处理方法就是装置金鸡独立显卡;8、联接线成绩。   显现器成绩:   卸载驱动的办法是:我的计算机——右键“属性”——软件——举措措施治理器——显现卡——右键——卸载。正在某个毛病中显现器假如有黑屏的情况才有能够与电源全体相关。某个很容易,没有接该署举措措施即可;   1、电磁搅扰。   显普耐尔平板电脑卡成绩:   显现器软件毛病。 安卓电脑模拟器   上面是一些能够有效的处理办法,正在那里一列进来。起初用小镊子直过来当前发觉显现器色彩所有畸形了,缺失的白色又返回了。    。这时能够右击“我的计算机”,取舍“治理”,再取舍“举措措施治理器”,{xx手机连接电脑电脑辐射xx}检查能否有叹号的项,如没有,则更换下即可“显现卡”或者“监督器”上面项的驱动;7、长机自身成绩。假如你的声响功率较年夜,防磁性能弱,放正在显现器边上比拟简单涌现这类情况。   硬件成绩:   率先要明确小半就是,银幕色彩没有畸形没有外乎两年夜来源:显卡和显现器。这类情况是,你接计算机的插座上是接电烧水起火或者用洗衣机等年夜功率用水举措措施招致。正常只需更改回准确的区分率即可,没有过现正在的显现正常都有“AUTO”主动调理性能,按一次此键即可;   3、电场反映。检测能否显卡驱动成绩的办法很容易:以WindowsXP为例,正在计算机开机进进骨碌期待画面时,假如可以准确显现XP徽标上白色而进进零碎当前却无奈显现,则证显然卡驱动没有准确。这时只需远离电场即可;   2、用水反映。送修时用外接灯管一试便可确认毛病位置。   提议遵照扫除方法,终止一下审查,而后再做兴除照旧培修解决。感化了显现器没有支撑的区分率招致这成绩也是罕见景象。劣质联接线没有屏障性能,正在电源线备件极易受反映,就算没有组装电脑配置清单这方面的反映,劣质联接线自身也有能够招致此成绩。
生儿子秘方

百度营销核心

&北京二手电脑nbsp;   您正在百度竞争同伴的网宏基电脑怎么样站上阅读时,可以或许会看到基于百度推行技能为您需要的共性化推行形式;而您对于该署推行形式的阅读和点击支笔记本电脑价格查询撑着呼应网站为您需要收费的网二手笔记本电脑价格络形式效劳。  注明:  如何开放一定海报位:     为了进一步优化您的阅读经验,预防主页推行位过多,大概许地位没有当,反应您的畸形阅读,百度新魔方电脑大师增了开放推行位的性能:您可以或许快捷开放障碍您阅读的一定推行位。 。        您可开{xx电脑管家xxinstagram...

&北京二手电脑nbsp;   您正在百度竞争同伴的网宏基电脑怎么样站上阅读时,可以或许会看到基于百度推行技能为您需要的共性化推行形式;而您对于该署推行形式的阅读和点击支笔记本电脑价格查询撑着呼应网站为您需要收费的网二手笔记本电脑价格络形式效劳。  注明:  如何开放一定海报位:     为了进一步优化您的阅读经验,预防主页推行位过多,大概许地位没有当,反应您的畸形阅读,百度新魔方电脑大师增了开放推行位的性能:您可以或许快捷开放障碍您阅读的一定推行位。 。        您可开{xx电脑管家xxinstagram电脑版}放的推行位单位没有受制约。       一次开放操作,仅限当次载入的页面无效,假如你刷新大概许再次拜访相反的页面时,还需求开放推行位显现,您需求再次点击“X旋钮”,停止开放操作。
大宝眼霜

怎样给挪动硬盘加密?挪动硬盘加密专文教程

正在你的挪动硬盘上面击鼠标右键,取舍启用bitlocker。直到加密电脑定时开机实现。      这时候会跳出一度驱动器加密的速度显现页,正在此框中显现了加密的详细消息,囊括速度等消息。将你的明码销毁到一度保险的地位,面击销毁后进进下一方法。   加密实现以后会有提醒,这时候你就能够安心肠用挪动硬盘来存储数据了,即便没有不慎拾了,外人没有明码也是无奈看到外面的数据的。      率先将挪动硬盘或者许U盘拔出计算机的USB接口。挪动硬盘做作是要时常身上照顾的,没有游戏电脑免有时会迷失,一旦迷失,外面的数据将变得没有再保险,假如外面有主要的消息,还将重年夜要挟到你的消息保险。   我们用挪动硬盘,...

正在你的挪动硬盘上面击鼠标右键,取舍启用bitlocker。直到加密电脑定时开机实现。      这时候会跳出一度驱动器加密的速度显现页,正在此框中显现了加密的详细消息,囊括速度等消息。将你的明码销毁到一度保险的地位,面击销毁后进进下一方法。   加密实现以后会有提醒,这时候你就能够安心肠用挪动硬盘来存储数据了,即便没有不慎拾了,外人没有明码也是无奈看到外面的数据的。      率先将挪动硬盘或者许U盘拔出计算机的USB接口。挪动硬盘做作是要时常身上照顾的,没有游戏电脑免有时会迷失,一旦迷失,外面的数据将变得没有再保险,假如外面有主要的消息,还将重年夜要挟到你的消息保险。   我们用挪动硬盘,是为了更便当的传输资料与存储资料。 电脑锁屏怎么设置      正在此方法中你要取舍销毁明码的形式,那里需要了两种形式,一种是销毁到资料,另一种是将明码打印进去,而后销毁,正常采纳第一怎样重装电脑系统种形式,行将明码销毁到资料。你要取舍一种加密的形式,正常状况我们用到至多的是第一种加密形式,即明码加密形式。      这时候零碎会主动调用bitlocker性能。 凡是作品内未标面起源均为原作品品!恭候您的见解 连载时请说明:连载自《计算机培修技能网》原文地面:   这种加密办法保险性无比高,但没有要因而就忽视了主要数据的销毁任务,最主要的还是寻常的时分要掩护好主要的资料。      接上去会有一度加密确认页,取舍动员加密旋钮,匹面磁盘的加密。      面击以后,会涌现一度销毁明码的页面。    。这时候你要做的就是耐烦期待。正在windows7零{xx电脑提速怎么把电脑里的照片传到iphone里xx}碎中对准于挪动存储的保险成绩,曾经有了保险的处置责罚企图。面选某个复选框,而后正在上面的两个输出框中输出再次一样的你所设定的明码,而后面击下一步。而后翻开电脑的资源治理器,即翻开我的计算机。因为,对于挪动电脑老是自动重启硬盘停止加密是无比多余的。
动物安乐死的方法

Windows XP开机以后有限主动重启

详细 我的计算机右键》零碎属性初级》策动和毛病回复复兴》安装》主动从新策动勾选去失落。 小提醒:正常保险形式确定是能够进入零碎的,假如保险形式也是有限主动关灯的话,能够思忖能否软件的缘由了,最好的方法就是先重装零碎试试了。试验能否能够畸形进入零碎? 1.Windows初级选项菜单中,先试验运用运用位置上下键挪动到[最初一次精确的配置],而后回车重启计算机,试验能否能畸形进入零碎。 3.假如还是无奈畸形的进入零碎,再次按F8进入Windows初级选项菜单,取舍第一项[保险形式]回车进入电脑桌面壁纸高清零碎。 开机策动项安装以后,就能够试验着再重启计算机了,重启计算机后假如发觉还那样的话,那样最...

详细 我的计算机右键》零碎属性初级》策动和毛病回复复兴》安装》主动从新策动勾选去失落。 小提醒:正常保险形式确定是能够进入零碎的,假如保险形式也是有限主动关灯的话,能够思忖能否软件的缘由了,最好的方法就是先重装零碎试试了。试验能否能够畸形进入零碎? 1.Windows初级选项菜单中,先试验运用运用位置上下键挪动到[最初一次精确的配置],而后回车重启计算机,试验能否能畸形进入零碎。 3.假如还是无奈畸形的进入零碎,再次按F8进入Windows初级选项菜单,取舍第一项[保险形式]回车进入电脑桌面壁纸高清零碎。 开机策动项安装以后,就能够试验着再重启计算机了,重启计算机后假如发觉还那样的话,那样最好再次进入保险形式,全盘杀毒,杀毒以后再次重启,如还那样,神舟电脑提议重装零碎了。 参考材料:零碎优化之避免用机启用项 有多余的审查开机策动项能否具有异样?譬喻说开机策动项具有一些生疏的策动项?自己能够运用msconfig性能或者一些硬件都能够到电脑时间校准达某个开机策动项的禁用 (电源选项初级安装) 正在翻开的电源选项属性安装窗口中,找出并单击切换到[初级]选项卡,正在初级选项卡看下图安装并肯定回到显现属性窗口再次肯定,安装终了以后重启计算机。 (零碎属性策动和毛病回复复兴安装) 正在圆桌面找出[我的计算机]并正在我的计算机图标上右键属性,翻开[零碎属性]顺序窗口,正在零碎属性窗口找出并单击切换到[初级]选项卡,正在初级选项卡找出[策动和毛病回复复兴]上面的[安装]按扭。 。 凡是作品内未标点起源均为原作品品!恭候您的见地 连载时请说明:连载自《计算机培修技能网》原文地点: 相关XP开机以后主动重启处理办法也解说终了,指视网友们能够基本白文本人也能处理有限主陌陌电脑版官方下载动重启某个计算机毛病。 2.如还是无奈畸形的进入零碎,再次按F8进入Windows初级选项菜单,运用位置键挪动到[禁用零碎失利时主动从新策动]此项,回车肯定,计算机主动重启。 (显现属性安装银幕掩护顺序) 再次正在圆桌面空缺点,右键取舍属性,翻开[显现属性]顺序窗口,正在显现属性顺序窗口中找出并单击切换到[银幕掩护顺序]选项卡,正在银幕掩护顺序选项卡中找出并单击[电源]按扭,操纵办法如次图所示。 (Windows初级选项菜单安装) 无奈进入零电脑系统碎做作没有能运用一般的办法畸形进入零碎,能够试验运用正在开机时气用按F8正在弹出的Windows初级选项菜单。 进手机助手电脑版入Window云电脑s保险形式以后,就和一般的操纵办法一样。按以次操纵。 (开放主动从新策动安装) 正在翻开的策动和毛病回复复兴窗口中,把[主动从新策动]前面的勾去失落,而后肯定。
美国强根

显现器无信号处理办法

没有然就会涌现这种事,这事儿碰到很屡次了(没有止一次碰到这事件了)。需求到培修点培修; 。插一度试了以后假如还没有亮的话提议把长机上的线拔下去换成显现器上再试。只能拿到有关的培修点,或许换个主板了; 电脑home键在哪 假如没有是第1步、第2步和第3步的缘由,那时翻开机箱盖子,检查机箱体主板变形形成的短路或许有无需要非金属物,闻一闻机箱体有无烧焦的糊味,CPU四周的库容有无保护、主板上有无焚毁的芯片等。 假如没有一些异样床上电脑桌的话,检查机箱外部有没污垢,假如局部话就清算主板上污垢,而后再开机审查计算性能否畸形。最好还要把主板从机箱外部拆进去测试;注明小半:主板拆进去的时分没有要放正在能导热...

没有然就会涌现这种事,这事儿碰到很屡次了(没有止一次碰到这事件了)。需求到培修点培修; 。插一度试了以后假如还没有亮的话提议把长机上的线拔下去换成显现器上再试。只能拿到有关的培修点,或许换个主板了; 电脑home键在哪 假如没有是第1步、第2步和第3步的缘由,那时翻开机箱盖子,检查机箱体主板变形形成的短路或许有无需要非金属物,闻一闻机箱体有无烧焦的糊味,CPU四周的库容有无保护、主板上有无焚毁的芯片等。 假如没有一些异样床上电脑桌的话,检查机箱外部有没污垢,假如局部话就清算主板上污垢,而后再开机审查计算性能否畸形。最好还要把主板从机箱外部拆进去测试;注明小半:主板拆进去的时分没有要放正在能导热的中央测试;测试时主板上面放多少该书或许一些能隔电的货色;那时测试假如能开机的话,就只能有能够正在刚刚刚刚拔下的多少个设施中或许是机箱静电招致的(有些机箱品质很差,有静电也会惹起相似的毛病)。 审查显现器的VGA线(数据线一头插正在显现器上一头插正在主板上的蓝色头的线 如图1所示)有没插好,或许VGA数据线电脑清理灰尘松动了。假如能够显现器批示灯亮了的话,就说显然示器正本的电源线没有行了,假如还没有行的话,能够是显现器自身电门出成绩了。第1和2能够清除,那只和电源烧了; 先审查插座能否有电,而后审查电源线能否曾经插正在长机上,审查电源线能否曾经松动? 图2是回收旧电脑金鸡独立显卡的地位。 先审查电源插座有没回电(时常碰到)。这小半必需要审查分明了,假如配的有金鸡独立显卡,定然要插正在金鸡独立显卡上, 尤其注明小半的是,假如你是金鸡独立显卡的话,必需插正在金鸡独立显卡上,没有能插正在集成显卡上。 假如实现前5步以后发觉毛病照旧的话,把主板电池组拿上去等个十多少秒再从新放下去,或许运用跳线的形式把主板安装回复复兴再试试。 凡是作品内未标点起源均为本作品品!恭候您的看法 连载时请说明:连载自《计算3d动态电脑桌面壁纸机培修技能网》本文地点: 而后逐个把硬盘,光驱等各设施一度一度的插上再试。而后再翻开显现器上看看显现器上的批示灯有没亮,没有亮的话电源插话多换多少个试试。 假如没有松动的话,而后按开机键,用手放正在机箱的反面,觉得一下能否有风(长机前面的电源电扇处)或许放正在机箱下面,觉得一下机箱外部能否有震撼(运转时次要外部CPU电扇和电源电扇转动时有细微的震撼)?或许拆开机箱,而后按开机键看一下主板上的一度电源外面的电扇有没转动长春电脑维修。假如转动了就注明能回电,没转动就注明没回电;假如没转动,提议换个电源试试。或许没有电源的话只能拿到培修点去看看了,由于电源电扇没转的话,就只要三个能够,要么插座没回电,要么是电源线坏了,电脑反应慢怎么处理要么就是电源烧了。假如正在此接入这个设施时毛病再次再现,那样注明就是此设施惹起的,那时就要力点审查此设施了; 拆下硬盘,光驱等各设施,除非电源、CPU、CPU电扇、外存其余的一切都拔掉。没其三个能够了。 假如主板内有焚毁,有烧焦糊味,或许库容有保护的成绩涌现。
afwswby60

深圳天威视讯网

网易云音乐电脑版       用满两年机顶盒收费捐献,贴水100元转为网费应用        &nbs电脑没声音怎么办p; 设施猫与电视顶盒各缴贴水100元(贴水可退还) 套餐引见:独享20M宽带,收费捐献28元/月电视机效劳   &买笔记本电脑要注意什么nbsp;            ...

  网易云音乐电脑版       用满两年机顶盒收费捐献,贴水100元转为网费应用        &nbs电脑没声音怎么办p; 设施猫与电视顶盒各缴贴水100元(贴水可退还) 套餐引见:独享20M宽带,收费捐献28元/月电视机效劳   &买笔记本电脑要注意什么nbsp;                                  捐献文广目录包、天华高清五套与VOD点播套餐      &nb电脑主机配置sp;   捐献一年电视机根本月租与时长回看性能 套餐万能钥匙电脑版下载引见:独享4M机顶盒WIFI上网,装置费100元        &nbs电脑密码怎么取消p;                 &nbs华硕笔记本电脑怎么样p;   。

LOFTER

让兴趣,更有趣

简单随性的记录
丰富多彩的内容
让生活更加充实

下载移动端
关注最新消息