对于一个APP开发,从零开始,分享一些经验(iOS)

我是一名iOSer,写了有3,4个APP了。从零开始,先说说最底层的吧。分享给新手。新手快上车~


  1. 对于登录用户的信息,要做成单例。并且储存起来。血一般的教训~不说了,都是泪。
  2. 对于配置信息,一般也需要做成单列,储存起来。
  3. 对于视图,一定要继承写,并且封装起来,对你以后有好处的!
  4. 对于方法类,工具类,要用category来写

2017-11-16更新


1.一般iOS程序都会用到pod,在写Podfile的第三方库名称时,最好加上版本。避免你再次pod install的时候,更新到最新方法导致第三方的一些方法没有而导致项目报错
2.对于block的一些个人见解和结束循环引用的一个思想

  • 循环引用的形成


    3BA38CE5-6531-4EC6-8B83-5A5F86A08C71.png
  • 接触循环引用思想


    0115669F-DA6B-430D-B978-B2BA9ABDCC81.png

2017-11-29更新

UITextField的值的获取

分享一个非常容易让人忽略的事情,偶然发现的.有的人对于UITextField的值获取,可能比较麻烦.写什么代理啊,计算,stirngappendstring之类的...

  1. 现在发现了一个非常简单的方法,苹果给了一个枚举.我们先来看看.UITextField继承于UIControl
  2. UIControl有一个方法
- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

3.我们看一下UIControlEvents枚举

typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
    UIControlEventTouchDown                                         = 1 <<  0,      // on all touch downs
    UIControlEventTouchDownRepeat                                   = 1 <<  1,      // on multiple touchdowns (tap count > 1)
    UIControlEventTouchDragInside                                   = 1 <<  2,
    UIControlEventTouchDragOutside                                  = 1 <<  3,
    UIControlEventTouchDragEnter                                    = 1 <<  4,
    UIControlEventTouchDragExit                                     = 1 <<  5,
    UIControlEventTouchUpInside                                     = 1 <<  6,
    UIControlEventTouchUpOutside                                    = 1 <<  7,
    UIControlEventTouchCancel                                       = 1 <<  8,

    UIControlEventValueChanged                                      = 1 << 12,     // sliders, etc.
    UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13,     // semantic action: for buttons, etc.

    UIControlEventEditingDidBegin                                   = 1 << 16,     // UITextField
   *UIControlEventEditingChanged                                    = 1 << 17,
    UIControlEventEditingDidEnd                                     = 1 << 18,
    UIControlEventEditingDidEndOnExit                               = 1 << 19,     // 'return key' ending editing

    UIControlEventAllTouchEvents                                    = 0x00000FFF,  // for touch events
    UIControlEventAllEditingEvents                                  = 0x000F0000,  // for UITextField
    UIControlEventApplicationReserved                               = 0x0F000000,  // range available for application use
    UIControlEventSystemReserved                                    = 0xF0000000,  // range reserved for internal framework use
    UIControlEventAllEvents                                         = 0xFFFFFFFF
};

我在那个枚举前加星了.看到了没有
5.接下来我们就这样写

[phoneNumberTF addTarget:self action:@selector(phoneNumberTFValueChange:) forControlEvents:UIControlEventEditingChanged];

6.实现phoneNumberTFValueChange:方法即可

UITextField的左右视图

分享一个小技巧

UITextField 有一个属性为leftView/rightView 可以给这个view赋值,显示在左/右侧
但是左/右视图的显示,需要一个枚举,leftViewMode/rightViewMode
枚举是这样的:
typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
    UITextFieldViewModeNever,
    UITextFieldViewModeWhileEditing,
    UITextFieldViewModeUnlessEditing,
    UITextFieldViewModeAlways
};

用法:

        UITextField *passwordTF = [[UITextField alloc] init];
        passwordTF.leftViewMode = UITextFieldViewModeAlways;
        passwordTF.rightView = ({
            UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 88, 40)];/// 这里多加一个view是为了控制button的位置,不然,给button赋值frame会发现没有用的,这个问题我只能这样解决
            UIButton *codeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
            codeBtn.frame = backView.bounds;
            [codeBtn setBackgroundColor:kLoginCodeBtnColor];
            [codeBtn setTitle:@"xxxx" forState:UIControlStateNormal];
            codeBtn.titleLabel.font = [UIFont systemFontOfSize:12];
            [codeBtn addTarget:self action:@selector(codeButtonClick:) forControlEvents:UIControlEventTouchUpInside];
            [backView addSubview:codeBtn];
            backView;
        });

2018-5-18更新

数组的KVC的一些用法

在我们取数组值的时候,进行一些比较大小,或者求和之类的操作.可以简化为
目前只找到这些,虽然不多,也算是小技巧

如有补充,请留言!!!

NSArray * array = @[  
                    @{@"name":@"hwc",  
                      @"count":@(10),  
                      @"url":@"blog.csdn.net/hello_hwc"  
                      },  
                    @{@"name":@"baidu",  
                      @"count":@(20),  
                      @"url":@"www.baidu.com"  
                      },  
                    @{@"name":@"google",  
                      @"count":@(22),  
                      @"url":@"www.google.com"  
                      }  
                    ];  
NSArray * nameArray = [array valueForKeyPath:@"name"];  
NSNumber *sum = [array valueForKeyPath:@"@sum.count"];  
NSNumber *max = [array valueForKeyPath:@"@max.count"];  
NSNumber *min = [array valueForKeyPath:@"@min.count"];  
NSLog(@"NameArray:%@",nameArray.description);  
NSLog(@"Sum:%@",sum.description);  
NSLog(@"max:%@",max.description);  
NSLog(@"min:%@",min.description);  

2018-6-25更新

获取AFNetworking的block块内的值后 在运行block块外的代码

__block id obj = nil;
[NetManager POST:urlString parameters:para progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    CFRunLoopStop(CFRunLoopGetMain());//先运行
    obj = resuponseObject;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    CFRunLoopStop(CFRunLoopGetMain());//先运行
    obj = error;
}];
CFRunLoopRun(); //后运行
NSLog(@"%@",[obj class]);

纯手写的....应该没有什么错误,有错误,请指出.摘自这里1楼帖子,感谢

2021-12-13更新

在方法传参超过3个的时候,尽量用模型(model)来传参。不然会传太多导致难以记忆!!!

有什么分享的下方留言。我们一起来学习进步和交流~

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