2014-11-15 09:55:45 u012900383 阅读数 9890

1. .m文件是纯Object-C 文件

.mm是Object-C和C++混合文件

 

2. .m只能调用纯Object-C的类,不能调用混合的

.mm可以调用Object-C的,也可以调用C++的

 

3. .m要调用混合的怎么办?

可以

解决办法是.h用Object-C的方式,而具体实现用.mm的方式

2015-05-22 17:58:59 qq_25475307 阅读数 403

main.m文件代码

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

重点1:

自动释放池 autorelease pool。这个是 iOS5 引入 Auto Reference Counting 后加入的。

要注意的是,这个意味着对应一个线程(在这里,就是主线程)。而对于一个多线程的 Application,你应该再为其他线程准备 autorelease pool。

重点2:

就是 UIApplicationMain。这最基本的功能,自然是创建一个 Application 对象。

其次呢,它还会创建相应的委托对象(Delegate),Application 在应用出现相应状态变化时调用相应的协议方法。

它负责建立应用程序的事件循环(Event Loop),事件循环中可以不断接收交互操作,比如屏幕触摸手势、各类传感器(重力加速器、陀螺仪等)等。


关于UIApplication

我们知道,一个可以拿出来得瑟的应用,至少要有一个 UIApplication 作为主体,接收各类 events。而还要有一个 UIApplicationDelegate 来作为具体处理 events 的家伙。简单说,前者接收事件,后者处理事件。

接收事件这部分的代码,iOS 都帮你写好了,你只需要把如何处理事件的代码写出来就行了。UIApplicationMain 会自动创建 UIApplication,这就是所谓“帮你写好了”。里面到底咋回事,你不用管。

你要做的,就是把 UIApplicationDelegate 搞定。工程创建好后,有一个 AppDelegate 这货在那。这货的代码如下:

#import 

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window;

@end

那么你看看 AppDelegate.m 文件,就知道这货都是如何处理事件的了(事实上,并没有啥代码,代码都被封装在了 UIApplicationDelegate 里)。


2016-05-10 14:31:12 qq_33391441 阅读数 432

在h头文件中定义一个属性对外是readonly的,但在类的内部是可读写的。所以可以在m源文件中的@interface部分重新定义此属性为readwrite,此时此属性对外是只读的,对内是读写的,此部分申明变量和属性。申明的变量,属性和方法均为私有的,只能够被当前类访问,相当于private

注明:在h文件中定义的变量,在外部可见

.h声明了类,相当于java的接口,在这里interface块外声明的函数和属性都是外部可见的,但是在块内的貌似是私有的
.m里面的所有东西都是对外封闭的  这样就是有效的源码的开源与闭源;


2018-03-22 16:41:32 u013857988 阅读数 783

# -*- coding: utf-8 -*-

import random

import os


def getArray():

    first = "abcdefghijklmnopqrstuvwxyz"

    second = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    third = "1234567890"

    number = "345"

    index = 0

    for i in range(500):

        final=(random.choice(first))

        index = random.randint(3, 5)

        for i in range(index):

            final+=(random.choice(first))

        final += (random.choice(second))

        for i in range(index):

            final+=(random.choice(third))

        array.append(final)

classArray = ['NSString','UILabel','NSDictionary','NSData','UIScrollView','UIView','UITextView','UITableView','UIImageView']#.h文件里属性的类型从这个数组里随机选

viewArray = ['UILabel','UIScrollView','UIView','UITextView','UITableView','UIImageView']#.m文件里创建的元素的类型从这个数组里随机选

array = []

getArray()#用于生成.h和.m文件中将要用的属性名

array = list(set(array))


#.h文件添加废代码

def HFileAddMj(file_path,old_str1,old_str2,old_str3,old_str4,old_str5):

    

    file_data = ""

    Ropen=open(file_path,'r')

    for line in Ropen:

        nameStr = random.choice(array)

        className = random.choice(classArray)

        if old_str1 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)#防止创建的属性名重复(创建一个从数组中删除一个)

        elif old_str2 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str3 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str4 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str5 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        else:

            file_data += line

    Ropen.close()

    Wopen=open(file_path,'w')

    Wopen.write(file_data)

    Wopen.close()

    print(file_data)


#.m文件添加废代码

def MFileAddMj(file_path,old_str1,old_str2,old_str3,old_str4,old_str5,old_str6,old_str7):

    

    file_data = ""

    Ropen=open(file_path,'r')#读取文件

    for line in Ropen:

        nameStr = random.choice(array)

        className = random.choice(viewArray)

        if old_str1 in line:#如果.h文件中的某一行里包含old_str,则往这一行添加一下语句

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+nameStr+'.userInteractionEnabled = YES;\n'+nameStr+'.layer.masksToBounds = YES;'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)#防止创建的元素名重复(创建一个从数组中删除一个)

        elif old_str2 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.layer.borderWidth = 1;'+nameStr+'.clipsToBounds = YES;\n'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str3 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str4 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str5 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str6 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str7 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        

        else:

            file_data += line

    Ropen.close()

    Wopen=open(file_path,'w')

    Wopen.write(file_data)

    Wopen.close()

    print(file_data)





def file_name(file_dir):

    for root, dirs, files in os.walk(file_dir):

        #print(root) #当前目录路径

        #print(dirs) #当前路径下所有子目录

        print(files) #当前路径下所有非目录子文件

        fileNameArray = files

        #遍历文件夹下的.h和.m文件并添加废代码

        for file in files:

            if '.h' in file:#file_dir+'/'+file含义是file_dir文件夹下的file文件

                HFileAddMj(file_dir+'/'+file, "l;", "m;","n;","q;","y;")#往凡是以"l;", "m;","n;","q;","y;"这些中的某一个结尾的oc语句后添加费代码

            if '.m' in file:

                MFileAddMj(file_dir+'/'+file, "n];", "w];","m];","c];","p];","q];","l];")#往凡是以"n];", "w];","m];","c];","p];","q];","l];"这些中的某一个结尾的oc语句后添加费代码

#要修改的文件所在的文件夹路径

file_floadPath = '/Users/zhoujinglin/Desktop/python-H-M'#要修还得文件所在的文件夹路径


file_name(file_floadPath)

2016-02-27 21:49:53 wj610671226 阅读数 736

制作属于自己的frameWork

1.首先先创建一个工程


2.创建自己的文件(即.h 和.m 文件),这里我创建了WJTool和WJView两个文件为例

3.在自己的文件中编写自己的代码,这里我写了两个打印的方法作为例子讲解



4.修改配置文件,把.h文件暴露出来



5.修改配置,设置成静态库,否则制作出来的frameWork是动态库

6.修改这里的设置,否则制作出来的frameWork会报错。

补:我这里选择的是iPhone6模拟器制作的,如果这里的参数是yes,在4S模拟器上面会报错,因为4S采用的是i386架构,iPhone6是X86_64架构

iPhone4S、 iPhone5   模拟器都是采用的i386

iPhone5S --> iPhone6S plus 模拟器采用的是X86_64

iPhone4S  真机采用的是armv7

iPhone5、iPhone5C 真机采用的是 armv7S

iPhone5S --> iPhone6s plus 采用的是 arm64

7.选择模拟器编译、选择真机编辑生成frameWork



8.创建新工程,测试我们制作的frameWork



综上所述,便是frameWork的制作过程了,如有错误,希望看到的朋友不吝赐教。





IOS .pch 文件详解

阅读数 103

没有更多推荐了,返回首页