实践-小细节Ⅷ

1.Block中的使用多个全局实例怎么办

你可以这样

 __weak typeof(SelectView)weakSelectDanJia = SelectView;
 __weak typeof(SelectView1)weakAllNumber = SelectView1;
 __weak typeof(SelectView2)weakMoney = SelectView2;
 __weak typeof(_numberTF)weakNumber = _numberTF;
 __weak typeof(self)weakSelf = self;
    _numberTF.block = ^(NSInteger cellTag) {
        if (!weakSelectDanJia.selectTitle) {
            weakNumber.text = @"";
            [MBProgressHUD showError:@"请先选择货号"];
        }else{
            if (weakNumber.text.length>0) {
                NSInteger allNumber = weakSelf.fhsrate*[weakNumber.text integerValue];
                CGFloat allmoney = [weakSelectDanJia.selectTitle doubleValue]*allNumber;
                weakAllNumber.selectTitle = [NSString stringWithFormat:@"%ld",allNumber];
                weakMoney.selectTitle =  [[MethodTool shareTool]stringDisposeWithFloat:allmoney ];
            }
       }
    };

也可以这样,这样不但书写方便,关键是大大增加可读性,并减少内存占用。

__weak typeof(self)weakSelf = self;
_numberTF.block = ^(NSInteger cellTag) {
    [weakSelf TFNumber];
};
- (void)TFNumber
{
    if (!SelectView[8].selectTitle) {
        _numberTF.text = @"";
        [MBProgressHUD showError:@"请先选择货号"];
    }else{
        if (_numberTF.text.length>0) {
           NSInteger allNumber = self.fhsrate*[_numberTF.text integerValue];
            CGFloat allmoney = [SelectView.selectTitle doubleValue]*allNumber;
            SelectView1.selectTitle = [NSString stringWithFormat:@"%ld",allNumber];
            SelectView2.selectTitle =  [[MethodTool shareTool]stringDisposeWithFloat:allmoney ];
      }
    }
}    

2.关键字const、static、extern、UIKIT_EXTERN区别和用法

const
这个单词翻译成中文是“常量”的意思。在程序中我们知道“常量”的值是不能变的,固定的。所以const关键字的作用就是:

(1)const用来修饰右边的基本变量或指针变量
(2)被修饰的变量只读,不能被修改

static

  • 修饰局部变量
    保证局部变量永远只初始化一次,在程序的运行过程中永远只有一份内存, 生命周期类似全局变量了,但是作用域不变。这句话怎么理解呢?还是以代码例子来讲解吧。

    随便建一个工程,在一个控制器类上监听控制器view的点击事件方法:

    但是我们再看看局部变量i被关键字static修饰后的情况:


  • 修饰全局变量
    使全局变量的作用域仅限于当前文件内部,即当前文件内部才能访问该全局变量。

    iOS中在一个文件声明的全局变量,工程的其他文件也是能访问的,但是我又不想让其他文件访问,这时就可以用static修饰它了,比较典型的是使用GCD一次性函数创建的单例,全局变量基本上都会用static修饰。

    下面是一个GCD一次函数创建的单例


  • 修饰函数
    static修饰函数时,被修饰的函数被称为静态函数,使得外部文件无法访问这个函数,仅本文件可以访问。这个在oc语言开发中几乎很少用,c语言倒是能看到一些影子,所以不详细探讨。

extern

这个单词翻译过来是“外面的、外部的”。顾名思义,它的作用是声明外部全局变量。这里需要特别注意extern只能声明,不能用于实现,而且定义和分配内存都在原来类中。

UIKIT_EXTERN
UIKIT_EXTERN,是经过处理的extern,其用法可以完全类比extern进行使用。

3.查看app应用启动时间分布



DYLD_PRINT_STATISTICS 1

4.iOS App间常用的五种通信方式

  • 1、URL Scheme
  • 2、Keychain
  • 3、UIPasteboard
  • 4、UIDocumentInteractionController
  • 5、local socket
    详细栗子

5. NSInteger和int 的区别

在32位系统下面,int、long、指针长度都是4,没有找到32位机器,也就没验证。
我这是在64位系统下验证的,也就说,
至少在64位系统下,int 是4位,long 是8位,指针也是8位。
所以说使用 NSInteger 更好,会根据32位系统还是64位系统来确定变量的长度,更好的利用系统所提供的最大位数。

6.千位加分隔符

NSNumberFormatter *moneyFormatter = [[NSNumberFormatter alloc] init];
moneyFormatter.positiveFormat = @"###,##0.00";
NSString *formatString = [moneyFormatter stringFromNumber:@(1234567.123)]

打印的最终结果是:

1,234,567.12

7.关于数据持久化

关于数据持久化可以用这样的图来方便记忆。 iOS中的文件的拷贝、移动、新建、删除、读取等都是 NSFileManager来实现的,而且这个类对象是单例。

8. 把JSon的txt文件转 NSDictionary

NSString *path = [[NSBundle mainBundle] pathForResource:@"lnglatInformation" ofType:@"txt"];
NSData *data = [NSData dataWithContentsOfFile:path];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];

9. 协议接口Protocol中添加@property

@protocol Mydelegate <NSObject>
@property (strong, nonatomic) NSString *MydelegateProperty;
- (void)hah ;
@end

@interface FirstVC : UIViewController
<Mydelegate>
@end

@implementation FirstVC
@synthesize MydelegateProperty = _MydelegateProperty;


SMK *mk = [SMK new];
mk.myde = self;
self.MydelegateProperty = @"asd";

NSLog(@"YYYY:%@",self.MydelegateProperty);
NSLog(@"UUUU:%@",mk.myde.MydelegateProperty);

重要的是两步:

<Mydelegate>
@synthesize MydelegateProperty = _MydelegateProperty;

即可赋值了。

10. NSURL 的系统API调用

NSURL 根据 RFC 2396 的定义提供了只读属性用于获取 URL 每一部分的值:

*   scheme,协议名,不带有连接内容的冒号,如“http”。
*   user,解码后的用户名。
*   password,解码后的 password。
*   host,主机域名或 IP 地址。
*   port ,端口号。
*   path,authority(user,password,host,port)后的部分,如果 URL 对象是 file URL,该属性会去掉最后的/。
*   query,解码后的 query 字符串,没有?,但包括连接多个键值对的&。
*   fragment,解码后的片段,不包括#。

 NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:88/path/cash?id=98&name=98"];
 url.scheme : http
 url.host   : www.baidu.com
 url.port    : 88
 url.path   : /path/cash
 url.query  : id=98&name=98

具体的例子如:

                    hierarchical part
        ┌───────────────────┴─────────────────────┐
                    authority               path
        ┌───────────────┴───────────────┐┌───┴────┐
  abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
scheme  user information     host     port                  query         fragment

  urn:example:mammal:monotreme:echidna
  └┬┘ └────────────┬───────────────┘
scheme              path
URL中的非法字符串的编译
由于url支持26个英文字母、数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,
就需要对其进行编码。iOS中提供了函数stringByAddingPercentEscapesUsingEncoding对中文和一些特殊字符进行编码,
但是stringByAddingPercentEscapesUsingEncoding的功能并不完善,对一些较为特殊的字符无效。
而对这些字符则可以使用CFURLCreateStringByteAddingPercentEscapes函数,`

  NSString *str = [NSString stringWithUTF8String:surl.c_str()];
  str = @"http://218.21.213.10/MobileOA/TIFF/鄂安办发45号关于下达2012年全市安全生产相对控制指标的通知1.jpg";
 str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容