Mac OS
自学Mac OS,从开发中点滴积累。
Johnny Tong
这个作者很懒,什么都没留下…
展开
-
mac Wireshark You do not have permission to capture on device “rvio“.
You do not have permission to capture on device原创 2024-09-29 20:06:32 · 253 阅读 · 0 评论 -
GCD dispatch_group
关于dispatch_group的概念以及几种场景下的使用关于dispatch_group 把一组任务提交到队列中,这些队列可以不相关,然后监听这组任务完成的事件。 最常见的几个方法:1、dispatch_group_create创建一个调度任务组2、dispatch_group_async 把一个任务异步提交到任务组里3、dispatch_group_ente...原创 2018-09-04 14:23:29 · 228 阅读 · 0 评论 -
iOS MVVM使用
对于从java过度过来的程序员来说,对MVC的影响是深远的。但是在做iOS开发中使用MVC导致Controller越来越臃肿,既要承担view又要做网络请求,Controller变得难以维护。 所以使用MVVM将Controller解放出来,让Controller只需要专注数据调配工作。 ViewModel则去负责数据加工并通过机制让view相应ViewModel的变化。 MVVM是基于胖mo原创 2018-03-28 15:53:41 · 5110 阅读 · 0 评论 -
GCD dispatch_semaphore(信号量)
需求: 假设有两个空置资源,同一时间却有三个线程要去进行访问,如何处理??? 或者异步并发下载大量图片,每个下载都会开辟一个新线程,可是我们担心开辟太多线程肯定cpu吃不消,那么我们这里也可以用信号量控制一下最大开辟线程数。定义 信号量:就是一种可用来控制访问资源的数量的标识,设定了一个信号量,在线程访问之前,加上信号量的处理,则可告知系统按照我们指定的信号量数量来执行多个线程。 其...原创 2018-09-04 14:35:08 · 153 阅读 · 0 评论 -
mac cocoa pods 安装过程中出现问题
自己在使用cocoapods的时候出现了问题,导致ruby环境出问题,pod文件的时候一直卡。 正确安装Mac系统下的rubyRuby安装方式有两种,一个是 rvm多环境安装, 一种是homebrew安装RVM安装 MAC 安装使用 Ruby 最安全方便的方式就是使用RVM, 安装链接点击右侧: https://rvm.io/rvm/install安装RVM 1.1 官方推...原创 2018-04-02 14:43:21 · 2746 阅读 · 0 评论 -
swift个人通讯录
注意:在做个人通讯录的时候第一次使用storyboard,stroyboard之间跳转传值。还有就是使用闭包回调ListTableViewControllerimport UIKitclass ListTableViewController: UITableViewController { /** block 特点 1 定义block可以和当前上下文一...原创 2018-04-12 11:07:49 · 720 阅读 · 0 评论 -
cocoa 处理多个网络请求
场景: 在开发中很多时候在同一个界面中会有多个网络请求,而且要在这几个网络请求成功返回的时候再做下一步操作。分析一种是对个网络请求结束后统一操作,在一个界面需要同时请求多种数据。比如列表数据,广告数据等,全部请求到再一起刷新界面。多个请求顺序执行,下一个请求依赖于上一个请求的结果。这些要求对呀普通的操作是可以做到并发控制和依赖操作。但是对于网络请求这种需要时间的请求来说,...原创 2018-05-16 16:42:16 · 407 阅读 · 0 评论 -
NavigationController
NavigationController结构图 UITabBarController和NavigationController结构类似原创 2018-08-08 15:33:23 · 175 阅读 · 0 评论 -
密码8到64位大小写字母+数字+字符 不能包含空格
#import "NSString+Extension.h"#define NULLString(string) ((![string isKindOfClass:[NSString class]])||[string isEqualToString:@""] || (string == nil) || [string isEqualToString:@""] || [string isKindO原创 2017-06-09 18:23:02 · 4937 阅读 · 0 评论 -
遍历文件夹下某种某种所有文件类型
- (NSArray*) allFilesAtPath:(NSString*) dirString { NSMutableArray* array = [NSMutableArray array]; //文件操作对象 NSFileManager *manager = [NSFileManager defaultManager]; //文件夹路径 NSStrin原创 2017-11-22 19:20:42 · 545 阅读 · 0 评论 -
NSArray去重过滤
两个 NSArray去重过滤 避免大量使用for循环// 取两个数组交集的时候,可以先将NSArray 转换成 NSMutableSet,再通过取二者交集即可,但是需要注意一点是数组中的元素最好复写一下isEqual和hash方法。保证取交集后的结果是正确的 NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13"...原创 2018-09-18 16:20:06 · 1062 阅读 · 0 评论 -
关闭window时终止程序
关闭window时候,终止应用程序大概分为两种情况,如下/** 保证当你关闭最后一个window或者关闭应用唯一的一个window时候应用自动退出 */- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { return YES;}// 监听方法[[NSNotific...原创 2019-01-17 15:22:15 · 624 阅读 · 0 评论 -
(设置/获取)系统声音
-(AudioDeviceID)getDefaultOutputDeviceID{ AudioDeviceID outputDeviceID = kAudioObjectUnknown; // get output device device OSStatus status = noErr; AudioObjectPropertyAddress prop...转载 2018-09-19 09:26:14 · 1199 阅读 · 0 评论 -
FMDatabaseQueue
- (void)addFMDatabaseQueue { FMDatabaseQueue * queue = [FMDatabaseQueue databaseQueueWithPath:self.dbPath];// dispatch_queue_t q1 = dispatch_queue_create("queue1", NULL);// dispatch_queue_t原创 2018-01-23 21:40:42 · 524 阅读 · 0 评论 -
根据byte计算文件大小
- (id)transformedValue:(NSString *)value{ double convertedValue = [value doubleValue]; int multiplyFactor = 0; NSArray *tokens = [NSArray arrayWithObjects:@"bytes",@"KB",@"MB",@"GB",@"TB",原创 2017-11-21 16:03:25 · 5702 阅读 · 0 评论 -
获取网络类型
#import "NetWorkJudge.h"#import <CoreWLAN/CoreWLAN.h>#include <SystemConfiguration/SystemConfiguration.h>@implementation NetWorkJudge- (NSString *)returnNetWorkJudge{ NSString *pingHost = @"abc.原创 2017-08-04 17:52:14 · 820 阅读 · 0 评论 -
加载gif图片
NSImage *img = [NSImage imageNamed:@"earth.gif"]; // or similar// [self.window.contentView setWantsLayer:YES]; _imageView.imageScaling = NSImageScaleNone; _imageView.animates = YES; _im原创 2017-09-15 09:24:08 · 316 阅读 · 0 评论 -
冒泡排序优化
之前使用冒泡排序只是暂时的进行相邻的数据进行交换,这样效率不是很高。现在进行对之前的冒泡排序进行优化。// 冒泡排序- (void)functionNice { int count = 0; // 比较多少次 int forcount = 0; // 循环多少次 BOOL flag = YES; NSMutableArray *arr = @[@16, @1, @2原创 2017-10-23 09:45:40 · 257 阅读 · 0 评论 -
打开mac系统偏好设置
[[NSWorkspace sharedWorkspace] openFile:@"/System/Library/PreferencePanes/UniversalAccessPref.prefPane"];打开的是偏好设置的万能辅助的界面如果你想打开,其他的界面可以替换后面的UniversalAccessPref.prefPane。想查找其他的pane名字,可以先用[[NSWorksp...原创 2018-09-19 09:36:02 · 1862 阅读 · 0 评论 -
GCD
在处理复杂的业务逻辑的时候会经常使用到线程,常用到GCD 处理线程逻辑。 <—GCD使用组合–>- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Insert code here to initialize your application// [self asyncConsurr原创 2017-11-09 11:06:28 · 283 阅读 · 0 评论 -
mac source tree gitignore
开发使用CocoaPods 开发项目,很容易提交一些不需要的代码到仓库,在SourceTree 里添加忽略文件这块老弄错,这次专门博客一下忽略步骤如下: 在SourceTree的偏好 编辑里面添加 *~ .DS_Store *.xcuserstate *.xcworkspace xcuserdata *.lock Pods如果添加了gitignore还是不起作用,则需要把缓...原创 2018-08-06 15:01:09 · 560 阅读 · 0 评论 -
mac 中启动另外一个程序并且将该窗口置于最前面
- (void)launchSoftWithBundleID:(NSString *)softPath{ NSBundle *softBundle = [NSBundle bundleWithPath:softPath]; NSString *bundleID = [softBundle bundleIdentifier]; //运行程序 NSTask *softT原创 2017-09-12 13:57:33 · 7120 阅读 · 3 评论 -
判断代码在哪个队列中运行
- (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%d", [self isMainQueue]); // 1 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ NSLo...原创 2018-09-18 14:41:17 · 904 阅读 · 0 评论 -
NSError 解析
NSDictionary * errorInfo = error.userInfo; if ([[errorInfo allKeys] containsObject: @"com.alamofire.serialization.response.error.data"]){ NSData * errorData = errorInfo[@"com.alamofi原创 2017-06-07 18:03:12 · 1820 阅读 · 0 评论 -
xcode 打包无法生成
之前项目中没有导入其他子项目。现在项目中导入了子项目导致打包时候出现无法打包。 解决方法如下: 方法一: 1、将子Project(Pods) Build Settings->Deployment->Skip Install 设置为 YES,但项目Project 的Skip Install却要保持为NO。 方法二: 将Pods 中 Build Phases->Copy Headers中的原创 2017-06-24 14:46:57 · 837 阅读 · 1 评论 -
NSPopover
NSPopover类似于iOS中自定义的popview也是点击一个button会弹出一个弹窗。 首先在xib中拖放两个NSPopover放到面板中,然后再分别拖动点击方法到控制器。 第二步就是在控制器中声明两个NSPopover变量,这样与拖放的两个NSPover相对应。 第三步就是分别懒加载NSPopver。 第四部就是声明两个控制器。@property(nonatomic,strong)原创 2017-10-16 22:16:39 · 896 阅读 · 0 评论 -
insertObjects: atIndexes:s;
在NSMutableArray添加NSArray,此时NSArray当做一个元素NSMutableArray *arrays = [NSMutableArray arrayWithObjects:@"1",@"2",@"5",@"4", nil]; NSArray *array = [NSArray arrayWithObjects:@"q",@"d",@"e", nil]; NSR原创 2017-06-15 22:13:05 · 4937 阅读 · 0 评论 -
copy 关键字
为什么要写这篇博客,面试的时候有可能会遇到这样的面试题:用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题? 首先搞懂copy十分重要;是什么 首先copy和mutableCopy是方法,是NSObject内定义的方法。还有对应的类方法copyWithZone:(struct...原创 2018-09-17 14:20:05 · 389 阅读 · 0 评论 -
screencapture
localhost:~ apple$ screencapture -hscreencapture: illegal option -- husage: screencapture [-icMPmwsWxSCUtoa] [files] -c force screen capture to go to the clipboard // 自动截取全屏并且保存到黏贴板 -C原创 2017-09-07 10:53:01 · 600 阅读 · 0 评论 -
NSWorkspace打开
// [[NSWorkspace sharedWorkspace] openFile:@""]; // 打开文件// [[NSWorkspace sharedWorkspace] selectFile:nil inFileViewerRootedAtPath:@"/Users/apple/Desktop/1111"]; // 打开文件夹原创 2018-01-25 14:46:41 · 537 阅读 · 0 评论 -
文件路径操作
- (void)file_opeation { NSString *filePath = @"/Users/apple/Desktop/测试1.docx"; NSLog(@"---获取路径中文件完整的文件名(带后缀)---%@", [filePath lastPathComponent]); // ---获取路径中文件完整的文件名(带后缀)---测试1.docx NSL原创 2017-11-17 11:08:33 · 425 阅读 · 0 评论 -
NSWindow 直接加载NSViewController
// @interface MainVC : NSViewControllerself.mainVC = [[MainVC alloc]initWithNibName:@"MainVC" bundle:nil]; NSWindow *mainWindow = [NSWindow windowWithContentViewController:self.mainVC]; //@prop原创 2017-11-15 15:54:07 · 1885 阅读 · 0 评论 -
mac 相对布局
#import "NSView+TWFrame.h"@implementation NSView (TWFrame)- (void)setX:(CGFloat)x{ CGRect frame = self.frame; frame.origin.x = x; self.frame = frame;}- (CGFloat)x{ return se...原创 2017-11-03 15:32:50 · 329 阅读 · 0 评论 -
Mac_NSLayout
使用NSLayout对控件进行布局,这个如果放到iOS中我是有自己写的一套控件布局的工具类。好多人都在用第三方的masry但是我没有选择用,因为第三方库中会有许多自己用不到的东西。如果出现问题有时候也不好处理。在mac os开发中使用NSLayout也是一次自己的尝试。 我这里有三个 nsview。布局如下- (void)addTowButton { self.towButton = [[N原创 2017-10-20 16:04:00 · 325 阅读 · 0 评论 -
NSSearch
在iOS中使用搜索功能可能会用到NSSearchController,但是在mac OS中没有这样控制器,只能只用NSSearchField。 下面直接上代码解释怎么使用 首先拖在控件库中拖一个NSSearchField空间放到xib中。@property (weak) IBOutlet NSSearchField *mySearchField;这里有一个问题就是NSSearchField中最原创 2017-10-17 11:19:38 · 438 阅读 · 0 评论 -
鼠标事件
- (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; NSTrackingArea *area =[[NSTrackingArea alloc] initWithRect:dirtyRect options:NSTrackingMouseEnteredAndExited|NSTrackingActiveInKe原创 2017-09-21 13:19:52 · 334 阅读 · 0 评论 -
mac 检测相同app
NSArray *apps = [NSRunningApplication runningApplicationsWithBundleIdentifier:[[NSBundle mainBundle] bundleIdentifier]]; NSLog(@"-apps----%@-----", apps); if ([apps count] > 1) { NS原创 2017-09-12 14:37:13 · 707 阅读 · 0 评论 -
NSButton
// 创建一个button NSButton *button = [[NSButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width/2-44,self.view.frame.size.height/2 + 30, 88, 88)]; // 按钮样式 button.bezelStyle = NSRounded原创 2017-09-11 16:14:46 · 739 阅读 · 0 评论 -
mac _ Screenshots and screenshots
由于项目需要,需要一个截图功能。// 截屏(全屏幕)- (IBAction)button1:(id)sender { NSMutableArray *datas = [NSMutableArray array]; //存储所有显示器显示id CGDirectDisplayID dspyIDArray[10]; uint32_t dspyIDCount = 0;原创 2017-09-06 16:47:50 · 441 阅读 · 0 评论 -
项目打开指定文件
通过Safari打开指定文件- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { // Insert code here to initialize your application // 这个是通过safari打开 NSString *fileExtension = @"png";原创 2017-09-05 10:59:23 · 324 阅读 · 0 评论