Implementation on Objective-C for Mac OS X, based on this article.
OOP
OOP – объектно ориентированное программирование
Simple way to implement multi-thread
I want show you simple way to create multi-thread calculations in few strings of code.
Simple collection of operations. But remember about blocks specifications and use proper storage type.
1
2 3 4 5 6 7 |
NSMutableArray *operations = [NSMutableArray array];
for (...) { NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ // calculation }]; [operations addObject:operation]; } |
If you don’t like blocks, you can easily make a subclass of NSOperation and overwrite main function.
Now time to create queue for operations, so just create instance of NSOperationQueue.
And in maxConcurrentOperationCount property you need setup proper value. For example 2, if you want to use just 2 concurrent threads for your calculations and continue in normal state with others operations in another threads.
In this case waitUntilFinished should be NO.
But if you want to use max threads of CPU, setup NSOperationQueueDefaultMaxConcurrentOperationCount to maxConcurrentOperationCount and YES to waitUntilFinished. Like in example below:
1
2 3 4 5 |
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:....]; [queue addOperations:operations waitUntilFinished:YES]; [queue waitUntilAllOperationsAreFinished]; [operations removeAllObjects]; |
If this is set, it will choose an appropriate value based on the number of available processors and other relevant factors.
1
2 3 |
enum {
NSOperationQueueDefaultMaxConcurrentOperationCount = -1 }; |
NSOperationQueueDefaultMaxConcurrentOperationCount: The default maximum number of operations is determined dynamically by the NSOperationQueue object based on current system conditions.
That it! It’s so simple today.
Subclass of UITextView with syntax highlighting for iOS 5.0 not finished (just sample)
With new iOS 6.0 everyone junior iOS developer can do code editor application with syntax highlighting. Because UITextView has attribute attributedText, which has enough parameters and functionality for it.
So, I want to say, my old project does not have sense. :)
The last build shared on git hub and everyone can modify it and try to finish, because it still not completed. Still has a problem with word wrap.
Maybe someone will get something new for self. Because this project used CoreText and CoreGraphics framework.
Enjoy!
ScrollView with scroll’s indicators, which are shown all the time.
UPDATE: This solution could cause some issues on iOS 7. For more detail look .
My simple solution by writing category for UIImageView, because scroller is imageview.
How to use :)
Just setup tag for your scrollview and you will get one with scroll indicators, which are shown all the time.
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#define noDisableVerticalScrollTag 836913
#define noDisableHorizontalScrollTag 836914 @implementation UIImageView (ForScrollView) - (void) setAlpha:(float)alpha { if (self.superview.tag == noDisableVerticalScrollTag) { if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleLeftMargin) { if (self.frame.size.width < 10 && self.frame.size.height > self.frame.size.width) { UIScrollView *sc = (UIScrollView*)self.superview; if (sc.frame.size.height < sc.contentSize.height) { return; } } } } if (self.superview.tag == noDisableHorizontalScrollTag) { if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleTopMargin) { if (self.frame.size.height < 10 && self.frame.size.height < self.frame.size.width) { UIScrollView *sc = (UIScrollView*)self.superview; if (sc.frame.size.width < sc.contentSize.width) { return; } } } } [super setAlpha:alpha]; } @end |
If you want both scroll it’s easy to change code.
Integrate High Scores service of mob1serv
Для начала нужно немного ознакомиться на сайте mob1serv как это работает.
Скачать либу с сайта или которую собрал я, немного модифицированную, добавил пару расширений. В мой версии также вложен пример с сайта mob1serv.
Начнем…
1. Нам нужно проверить интернет соединение, лучше всего воспользоваться Reachability, уже готовым решением от разработчиков Apple. На этом моменте останавливаться не будем, в примере все показано.
2. Перед тем как мы будем работать непосредственно с API либы, продемострирую как ее подключить к проекту
Continue reading
UML диаграммы в Xcode
На написание данного поста меня с подвигла недавняя задача! Мне нужно было для записки и слайдов дипломного проекта предоставить UML диаграммы. Сначала по гуглил и сразу попал на страницу одной софтины, которая называется MacTranslator, забегая на перед, т.к. многие могут просто не дочитать, НЕ РЕКОМЕНДУЮ ее покапать, хотя вряд ли ее кто и купит из читателей и простых серферов веба, т.к. софтина стоит 465$, если не ошибаюсь :)
Небольшое отступление:
С Xcode средой разработки я знаком уже почти 2 года, и с версиями ниже 3-ей не работал. Многое уже освоил, но занимаюсь изучением возможностей данной среды далее. Считаю, что много интересного я еще не знаю!
Далее я нашел много интересного программного обеспечения, но ни один из продуктов мне не пришелся по вкусу и функционалу, всего 2 продукта поддерживали Objective-C, что весьма печально. В итоге я начал рисовать вручную и когда зашел в Xcode меня осенило, что я зря провел время на поиски! На сегодняшний день Xcode может все сделать за вас! Как давно есть этот функционал я не задавался вопросом, но по моим предположениям и по скриншотам, могу предположить что довольна таки давно, примерно с 2006 года точно! Судя по данному документу!
Немного еще поискав по девелоперской части сайта , наткнулся на Introduction to Xcode Design Tools for Class Modeling
Кратко о том как это делается, на одном из семплов от Apple, к примеру “QuartzDemo”:
1. Добавляем новый фаил “Class Model”
Continue reading
UIImage and Memory
+[UIImage imageNamed:]
• Reads the file, uncompresses it, caches result
• Cached copy of data is kept even if the UIImage is deallocated
• Low memory condition causes cache to be purged.
• No direct control over when cache is purged.
• Use for small frequently drawn images.
+[UIImage imageWithContentsOfFile:]
• Just reads enough of file to determine if it can open the file.
• Reads and uncompresses the file each time it draws. Uses uncompressed size worth of memory only temporarily.
• Assigning a UIImage created this way to a UIImageView or as the contents of a CALayer also causes it to read and uncompress the file. The UIImageView or CALayer keep the expanded version.
Continue reading
iPhone 3D Samples from “iPhone 3D Programming” book
Good book!
Do you have a great idea for a graphics-intensive iPhone or iPad application, but don’t know how to bring it to life? This book offers the perfect solution: a crash course on the OpenGL graphics library with an overview of iPhone 3D development. Whether you’re an experienced OpenGL developer looking to build iPhone apps for the first time, or an iPhone developer wanting to learn sophisticated graphics, iPhone 3D Programming addresses both in one concise, easy-to-use guide.
What does it take to build an iPhone app with stunning 3D graphics? This book will show you how to apply OpenGL graphics programming techniques to any device running the iPhone OS — including the iPad and iPod Touch — with no iPhone development or 3D graphics experience required. iPhone 3D Programming provides clear step-by-step instructions, as well as lots of practical advice, for using the iPhone SDK and OpenGL.
Continue reading
В свободное время
В свободное время решил поработать немного над созданием простого клиента для социальной сети “Вконтакте”. Хочу поделиться маленьким результатом. Это пока скромная версия, которая может вывести список, отправить сообщение, изменить статус и еще несколько мелочей…
Я не руководился тем нужно это или нет, просто было интересно поработать с новым API от “Вконтакте”.
Спасибо за внимания, если получится что-то хорошее, то возможно появится и для общего пользования.
P.S.: Хочу заметить, что этот проект больше для повышения опыта разработки и не поддается критике :)